批量文件范围

先进的感谢您的帮助! 我有一个batch file的问题给你们。 所以我们跟上我们的一个客户的备份。 他们距离我们200多英里远。 我们通过远程桌面提供备份。 我们发现通过命令提示符使用复制function比其他任何复制/粘贴方法快得多。 负责带他们的人经常忘记这样做。 我刚刚开始使用批处理,但是我创build了一个小批处理程序,它会询问用户要把哪个文件复制过来,所以他不必“复制n:\ backups \ blah \ tsclient \ h \ backups \ blah”这可能是相当容易出错的。 以下是batch file:

@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 

如果只有less数备份需要提交,这是很好的。 我的问题是这个; 有没有办法带来一系列的备份? 该文件设置如下:

 dailyYYYYMMDD.zipx ie daily20140917.zipx 

我没有要求的date范围的问题,但获得.bat循环通过该文件夹,只有那些符合标准是我遇到的问题。 有什么想法吗?

您可以使用一个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 

我遇到了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 /ay=%date:~0,4% set /am=%date:~4,2% set /ad=%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