Batch file range
Thank you for your help! I have a question about a package for you guys. Therefore, we keep up with one of our client backups. They are located 200 miles from us. We carry out backups via remote desktop. We found that using the command line copy function is MUCH faster than any other copy / paste method. The person in charge of attracting them often forgets about it. I just started using batches, but created a small batch program that will ask the user which file to migrate, so he doesn't need to "copy n: \ backups \ blah \ tsclient \ h \ backups \ blah" which can be quite affected mistakes. Below is the 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
It's good if there are only a few backups left. My question is this; Is there a way to implement a range of backups? The file is configured as follows:
dailyYYYYMMDD.zipx i.e. daily20140917.zipx
I have no problem asking for a date range, but getting a byte through that folder and only getting those that match the criteria is where I ran into the problem. Any thoughts?
source to share
You can use
to list files:
@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
source to share
I came across a trick with xcopy that allows you to generate a sequence of valid dates. The following script will generate a sequence and then copy each of the files.
@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
Output on my machine:
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
source to share