标题: [文本处理] [已解决]如何用批处理查找最新的文件夹名称并自动复制? [打印本页]
作者: temp 时间: 2010-2-20 19:40 标题: [已解决]如何用批处理查找最新的文件夹名称并自动复制?
如何用批处理查找最新的文件夹名称并自动复制到指定文件夹中- if not exist "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs" md "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs"
- set newdest=E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs
- 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
下列代码可以成功复制最新文件夹内的内容到指定文件夹,但我希望连文件夹一起复制,请朋友们帮忙修改一下,谢谢!- @echo off
- setlocal enabledelayedexpansion
- call:main
- pause
- endlocal
- goto :eof
-
- :main
- if not exist "E:\NETT_Slof\Symantec Antivirus企业版\VirusDefs" md "E:\NETT_Slof\Symantec Antivirus企业版\VirusDefs"
- call:findnewfolder "C:\Program Files\Common Files\Symantec Shared\VirusDefs"
- if "!answer!"=="" (
- echo C:\Program Files\Common Files\Symantec Shared\VirusDefs里找不到文件夹
- exit /b
- )
- for /f "delims=" %%i in ('dir /a:-d /b /s "!answer!"\') do (
- call:copyandrename "%%i" "E:\NETT_Slof\Symantec Antivirus企业版\VirusDefs\%%~nxi"
- )
- exit /b
-
- :findnewfolder
- for /f "delims=" %%i in ('dir /a:d /b /o:-d %1') do (
- set "answer=%~1\%%i"
- exit /b
- )
- set "answer="
- exit /b
-
- :copyandrename
- if not exist %2 (
- copy %1 %2
- exit /b
- ) else (
- call:copyandrename %1 "%~dp2n%~nx2"
- exit /b
- )
复制代码
作者: 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
- @echo off
- setlocal enabledelayedexpansion
- for /f "tokens=1,2 delims==" %%i in (definfo.dat) do (
- if /i "%%i"=="curdefs" set str=%%j
- )
-
- xcopy /e /y "%~dp0%str%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%str%\"
- 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
- @echo off
- echo @echo off>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo setlocal enabledelayedexpansion>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo for /f "tokens=1,2 delims==" %%i in (definfo.dat) do (>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo if /i "%%i"=="curdefs" set str=%%j>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo )>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo xcopy /e /y "%%~dp0%%str%%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%%str%%">>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- 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" 不能自动执行- @echo off
- title=
-
- :top
- set /p NetConf=请输入你选择的操作(备份为1,还原为2):
- if /i "%NetConf%" equ "1" (goto Backup) else if /i "%NetConf%" equ "2" (goto Default) else (goto :eof)
-
- :Backup
- setlocal enabledelayedexpansion
- if exist "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd" del /f /s /q "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd"
- 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"
- if not exist "VirusDefs" md "VirusDefs"
- xcopy Backup.cmd "%CommonProgramFiles%\Symantec Shared\VirusDefs\"
- call "%CommonProgramFiles%\Symantec Shared\VirusDefs\Backup.cmd"
- goto end
-
- :Default
- xcopy ".\VirusDefs" "%CommonProgramFiles%\Symantec Shared\" /s
- xcopy "VirusDefs\definfo.dat" "%CommonProgramFiles%\Symantec Shared\VirusDefs\" /y
- xcopy "VirusDefs\usage.dat" "%CommonProgramFiles%\Symantec Shared\VirusDefs\" /y
- goto end
复制代码
作者: Batcher 时间: 2010-2-23 13:29 标题: 回复 8楼 的帖子
- @echo off
- set str=BatHome
- >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楼 的帖子
- 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 发表
哪里少了一个%呢?能否把最新的代码贴出来,并说说是哪一行出了问题?
在六楼,
- @echo off
- echo @echo off>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo setlocal enabledelayedexpansion>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo for /f "tokens=1,2 delims==" %%i in (definfo.dat) do (>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo if /i "%%i"=="curdefs" set str=%%j>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo )>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo xcopy /e /y "%%~dp0%%str%%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%%str%%">>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- call "%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
复制代码
作者: Batcher 时间: 2010-2-24 01:27 标题: 回复 18楼 的帖子
for循环里面的%%i和%%j前面的百分号个数也需要加倍- @echo off
- echo @echo off>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo setlocal enabledelayedexpansion>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo for /f "tokens=1,2 delims==" %%%%i in (definfo.dat) do (>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo if /i "%%%%i"=="curdefs" set str=%%%%j>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo )>>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- echo xcopy /e /y "%%~dp0%%str%%" "E:\NETT_Slof\Symantec Antivirus企业版9.0\VirusDefs\%%str%%">>"%CommonProgramFiles%\Symantec Shared\VirusDefs\back.cmd"
- 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://www.bathome.net/) |
Powered by Discuz! 7.2 |