繁体   English   中英

批处理文件范围

[英]Batch File Range

谢谢你的帮助! 我有一个批处理文件问题给你们。 所以我们跟上客户的一个备份。 它们距离我们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循环遍历文件夹,只获得满足条件的那些是我遇到问题的地方。 有什么想法吗?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM