Board logo

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

作者: temp    时间: 2010-2-20 19:40     标题: [已解决]如何用批处理查找最新的文件夹名称并自动复制?

如何用批处理查找最新的文件夹名称并自动复制到指定文件夹中
  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 编辑 ]
作者: temp    时间: 2010-2-20 23:07

下列代码可以成功复制最新文件夹内的内容到指定文件夹,但我希望连文件夹一起复制,请朋友们帮忙修改一下,谢谢!
  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. )
复制代码

作者: temp    时间: 2010-2-21 12:43

没人会吗?
在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
作者: temp    时间: 2010-2-21 12:49

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

usage.dat
[20100220.006]
DEFWATCH_10=1
NAVCORP_70=1
NAVCORP_70_2=1
作者: sgaizxt001    时间: 2010-2-22 05:04

  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 编辑 ]
作者: temp    时间: 2010-2-22 23:26

原帖由 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 编辑 ]
作者: Batcher    时间: 2010-2-23 01:13     标题: 回复 6楼 的帖子

“%~dp0% 不能正确写入”是什么意思?
作者: temp    时间: 2010-2-23 02:56

原帖由 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 编辑 ]
作者: temp    时间: 2010-2-23 03:15

我换了一种用法,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
复制代码

作者: Batcher    时间: 2010-2-23 13:29     标题: 回复 8楼 的帖子

  1. @echo off
  2. set str=BatHome
  3. >back.cmd echo %%~dp0%%str%%
复制代码

作者: temp    时间: 2010-2-23 20:22

原帖由 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
该怎样写呢?

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

谢谢
作者: Batcher    时间: 2010-2-23 20:30     标题: 回复 11楼 的帖子

  1. start "" "C:\Program Files\Common Files\Symantec Shared\VirusDefs\back.cmd"
复制代码

作者: temp    时间: 2010-2-23 20:37

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

显示 此时不应有 i。
作者: BatCoder    时间: 2010-2-23 20:43

能否截个图传上来看看?
作者: temp    时间: 2010-2-23 21:14

原帖由 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" 调用显示如下:
作者: temp    时间: 2010-2-23 21:22

非常感谢大家的帮助!

虽然按下葫芦浮起瓢,没能实现预期目标,但也算成功了,现暂时停止继续测试(类似的情况遇到多次了,明明没错就是不成功,过上一段时间重新测试它反而正常了
作者: Batcher    时间: 2010-2-23 21:28     标题: 回复 15楼 的帖子

哪里少了一个%呢?能否把最新的代码贴出来,并说说是哪一行出了问题?
作者: temp    时间: 2010-2-23 21:57

原帖由 Batcher 于 2010-2-23 21:28 发表
哪里少了一个%呢?能否把最新的代码贴出来,并说说是哪一行出了问题?

在六楼,
  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"
复制代码

作者: Batcher    时间: 2010-2-24 01:27     标题: 回复 18楼 的帖子

for循环里面的%%i和%%j前面的百分号个数也需要加倍
  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-24 16:44

原帖由 Batcher 于 2010-2-24 01:27 发表
for循环里面的%%i和%%j前面的百分号个数也需要加倍@echo off
echo @echo off>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
echo setlocal enabledelayedexpansion>>"%CommonProgramFiles%\Symantec ...


谢谢谢谢!

经测试手工运行成功,发现此段少了个\,批处理调用还是不行(start "" "%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd")

echo xcopy /e /y "%%~dp0%%str%%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%%str%%\">>"%...

[ 本帖最后由 temp 于 2010-2-24 16:46 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2