先谢谢您的帮助!我有一个批处理文件问题给你们。所以我们跟上客户的一个备份。它们距离我们200多英里。我们通过远程桌面进行备份。我们发现通过命令提示符使用复制功能比任何其他复制/粘贴方法快得多。负责将他们带过来的人经常忘记这样做。我刚刚开始使用批次,但我创建了一个小批量程序,它将询问用户带来哪个文件,因此他不必“复制n:\ backups \ blah \ tsclient \ h \ backups \ blah”这可能非常容易出错。以下是批处理文件:
@echo off
title Copy Zipbacks
:loopagain
set /p date=Enter the date that needs to be copied over (yyyymmdd format):
copy h:\zipbackups\daily%date%.zipx \\tsclient\h\benton_off_site_backup\zipbackups
set /p again=Copy Another Daily Zip file? (Y/N):
IF "%again%"=="Y" GOTO loopAgain
IF "%again%"=="N" GOTO goAway
:goAway
exit
如果只有少数备份可以使用,这是很好的。我的问题是这个;有没有办法带来一系列备份?该文件设置如下:
dailyYYYYMMDD.zipx
i.e. daily20140917.zipx
我没有问题要求日期范围,但是让.bat循环遍历文件夹并只获得符合条件的那些是我遇到问题的地方。有什么想法吗?
答案 0 :(得分:2)
您可以使用for
枚举文件:
@echo off
title Copy Zipbacks
:loopagain
set /p start_date=Enter start date that needs to be copied over (yyyymmdd format):
set /p end_date=Enter end date (yyyymmdd format) or nothing to match only start date:
if not defined end_date set end_date=%start_date%
for %%f in (h:\zipbackups\daily*.zipx) do if "%%~nf" geq "daily%start_date%" if "%%~nf" leq "daily%end_date%" copy %%f \\tsclient\h\benton_off_site_backup\zipbackups
set /p again=Copy Another Daily Zip file? (Y/N):
IF "%again%"=="Y" GOTO loopAgain
IF "%again%"=="N" GOTO goAway
:goAway
exit
答案 1 :(得分:1)
我遇到了一个使用xcopy的技巧,可以让你生成一系列有效日期。以下脚本将生成序列,然后复制每个文件。
@echo off
::set /p date=Enter the start date that needs to be copied over (yyyymmdd format):
::set /p end=Enter the end date that needs to be copied over (yyyymmdd format):
set /a date=20010218
set /a end=20010302
set /a y=%date:~0,4%
set /a m=%date:~4,2%
set /a d=%date:~6,2%
echo INPUT = %y% %m% %d%
:getnextvaliddate
set /a d+=1
if %d% gtr 31 (
set d=1
set /a m+=1
if %m% gtr 12 (
set m=1
set /a y+=1
)
)
echo %y% %m% %d%
xcopy /d:%m%-%d%-%y% /h /l "%~f0" "%~f0\" >nul 2>&1 || goto getnextvaliddate
call :prettydate
if %y% equ %end:~0,4% (
if %m% equ %end:~4,2% (
if %d% equ %end:~6,2% (
goto :EOF
)
)
)
goto :getnextvaliddate
:prettydate
if %d% lss 10 (
set dd=0%d%
) else (
set dd=%d%
)
if %m% lss 10 (
set mm=0%m%
) else (
set mm=%m%
)
echo copy h:\zipbackups\daily%y%%mm%%dd%.zipx \\tsclient\h\benton_off_site_backup\zipbackups
goto :EOF
我机器上的输出:
INPUT = 2001 2 26
2001 2 27
copy h:\zipbackups\daily20010227.zipx \\tsclient\h\benton_off_site_backup\zipbackups
2001 2 28
copy h:\zipbackups\daily20010228.zipx \\tsclient\h\benton_off_site_backup\zipbackups
2001 2 29
2001 2 30
2001 2 31
2001 3 1
copy h:\zipbackups\daily20010301.zipx \\tsclient\h\benton_off_site_backup\zipbackups
2001 3 2
copy h:\zipbackups\daily20010302.zipx \\tsclient\h\benton_off_site_backup\zipbackups