[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]如何用批处理查找最新的文件夹名称并自动复制?

如何用批处理查找最新的文件夹名称并自动复制到指定文件夹中
  1. if not exist "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs" md "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs"
  2. set newdest=E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs
  3. copy "C:\Program Files\Common Files\Symantec Shared\VirusDefs\20100201.009" "%newdest%\"
复制代码
20100201.009  是文件夹名

今天最新的文件夹名称是: 20100219.002

下一次文件夹名称不详


谢谢!

[ 本帖最后由 temp 于 2010-2-24 22:52 编辑 ]
1

评分人数

    • Batcher: 感谢主动给标题标注[已解决]字样PB + 2

下列代码可以成功复制最新文件夹内的内容到指定文件夹,但我希望连文件夹一起复制,请朋友们帮忙修改一下,谢谢!
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. call:main
  4. pause
  5. endlocal
  6. goto :eof
  7. :main
  8. if not exist "E:\NETT_Slof\Symantec Antivirus企业版\VirusDefs" md "E:\NETT_Slof\Symantec Antivirus企业版\VirusDefs"
  9. call:findnewfolder "C:\Program Files\Common Files\Symantec Shared\VirusDefs"
  10. if "!answer!"=="" (
  11. echo C:\Program Files\Common Files\Symantec Shared\VirusDefs里找不到文件夹
  12. exit /b
  13. )
  14. for /f "delims=" %%i in ('dir /a:-d /b /s "!answer!"\') do (
  15. call:copyandrename "%%i" "E:\NETT_Slof\Symantec Antivirus企业版\VirusDefs\%%~nxi"
  16. )
  17. exit /b
  18. :findnewfolder
  19. for /f "delims=" %%i in ('dir /a:d /b /o:-d %1') do (
  20. set "answer=%~1\%%i"
  21. exit /b
  22. )
  23. set "answer="
  24. exit /b
  25. :copyandrename
  26. if not exist %2 (
  27. copy %1 %2
  28. exit /b
  29. ) else (
  30. call:copyandrename %1 "%~dp2n%~nx2"
  31. exit /b
  32. )
复制代码

TOP

没人会吗?
在C:\Program Files\Common Files\Symantec Shared\VirusDefs中有两个文件中包含最新的文件夹名,利用他们也可以啊
definfo.dat
[DefDates]
CurDefs=20100219.002
LastDefs=20100201.009

usage.dat
[20100219.002]
DEFWATCH_10=1
NAVCORP_70=1
NAVCORP_70_2=1

TOP

现在的最新文件夹名(红色部分)
definfo.dat
[DefDates]
CurDefs=20100220.006
LastDefs=20100219.002

usage.dat
[20100220.006]
DEFWATCH_10=1
NAVCORP_70=1
NAVCORP_70_2=1

TOP

  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f "tokens=1,2 delims==" %%i in (definfo.dat) do (
  4.    if /i "%%i"=="curdefs" set str=%%j
  5.                                                      )
  6. xcopy /e /y "%~dp0%str%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%str%\"
  7. pause >nul
复制代码

你试一下看看,我测试可以

[ 本帖最后由 sgaizxt001 于 2010-2-22 05:06 编辑 ]

TOP

原帖由 sgaizxt001 于 2010-2-22 05:04 发表
@echo off
setlocal enabledelayedexpansion
for /f "tokens=1,2 delims==" %%i in (definfo.dat) do (
   if /i "%%i"=="curdefs" set str=%%j
                                                     )

xco ...

谢谢!

经测试可行,还差不能自动调用 call "%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd" 不知那里漏什么了

delims==" %%i  "%%i"=="curdefs" set str=%%j 写入back.cmd后缺一个%,%%i改成%%%i后,无法成功写back.cmd
  1. @echo off
  2. echo @echo off>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
  3. echo setlocal enabledelayedexpansion>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
  4. echo for /f "tokens=1,2 delims==" %%i in (definfo.dat) do (>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
  5. echo if /i "%%i"=="curdefs" set str=%%j>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
  6. echo )>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
  7. echo xcopy /e /y "%%~dp0%%str%%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%%str%%">>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
  8. call "%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
复制代码

[ 本帖最后由 temp 于 2010-2-23 20:57 编辑 ]

TOP

回复 6楼 的帖子

“%~dp0% 不能正确写入”是什么意思?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2010-2-23 01:13 发表
“%~dp0% 不能正确写入”是什么意思?

我希望把"%~dp0%str%"完整地写入到back.cmd文件中(就是原封不动地写入到back.cmd文件中,而我实际运行的结果是得到运行批处理文件的路径)

还有个问题是
call "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd" 不能自动执行

[ 本帖最后由 temp 于 2010-2-23 03:13 编辑 ]

TOP

我换了一种用法,call "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd" 不能自动执行
  1. @echo off
  2. title=
  3. :top
  4. set /p NetConf=请输入你选择的操作(备份为1,还原为2):
  5. if /i "%NetConf%" equ "1" (goto Backup) else if /i "%NetConf%" equ "2" (goto Default) else (goto :eof)
  6. :Backup
  7. setlocal enabledelayedexpansion
  8. if exist "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd" del /f /s /q "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd"
  9. if exist "VirusDefs" rd /s /q "VirusDefs" & if exist "definfo.dat" del /f /s /q "definfo.dat" & if exist "usage.dat" del /f /s /q "usage.dat"
  10. if not exist "VirusDefs" md "VirusDefs"
  11. xcopy Backup.cmd "%CommonProgramFiles%\Symantec Shared\VirusDefs\"
  12. call "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd"
  13. goto end
  14. :Default
  15. xcopy ".\VirusDefs" "%CommonProgramFiles%\Symantec Shared\" /s
  16. xcopy "VirusDefs\definfo.dat" "%CommonProgramFiles%\Symantec Shared\VirusDefs\" /y
  17. xcopy "VirusDefs\usage.dat" "%CommonProgramFiles%\Symantec Shared\VirusDefs\" /y
  18. goto end
复制代码

TOP

回复 8楼 的帖子

  1. @echo off
  2. set str=BatHome
  3. >back.cmd echo %%~dp0%%str%%
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2010-2-23 13:29 发表
@echo off
set str=BatHome
>back.cmd echo %%~dp0%%str%%


谢谢! 已经正确写入(说实话,我根本不懂批处理,只会比着葫芦画瓢,而且还没画好,缺了一个%)

请教!
要用批处理执行 C:\Program Files\Common Files\Symantec Shared\VirusDefs\back.cmd
该怎样写呢?

就差这一步,批处理自动备份最新的病毒定义库的批就完工了

谢谢

TOP

回复 11楼 的帖子

  1. start "" "C:\Program Files\Common Files\Symantec Shared\VirusDefs\back.cmd"
复制代码
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

原帖由 Batcher 于 2010-2-23 20:30 发表
start "" "C:\Program Files\Common Files\Symantec Shared\VirusDefs\back.cmd"

显示 此时不应有 i。

TOP

能否截个图传上来看看?
Do All in Command Line

TOP

原帖由 BatCoder 于 2010-2-23 20:43 发表
能否截个图传上来看看?


谢谢关注!

由于又发现了写入的文件缺少一个%,加一个%后又无法写入,只好把提前写好的批放入C:\Program Files\Common Files\Symantec Shared\VirusDefs\中,手工运行正常,用start "" "C:\Program Files\Common Files\Symantec Shared\VirusDefs\back.cmd" 调用显示如下:

TOP

返回列表