如何批量创build昨天的date

copy \\server01\E$\LogFiles\IVR\bcR\??120428.* \\LBC\workgroup\cs\ftp\Team\bcR\ copy \\server02\E$\LogFiles\IVR\bcR\??120428.* \\LBC\workgroup\cs\ftp\Team\bcR\ copy \\server03\E$\LogFiles\IVR\bcR\??120428.* \\LBC\workgroup\cs\ftp\Team\bcR\ copy \\server04\E$\LogFiles\IVR\bcR\??120428.* \\LBC\workgroup\cs\ftp\Team\bcR\ 

这是我目前的脚本,我必须每周更改date。 我正在寻找一个脚本,看今天的当前date减去一天,并可以修改12 04 28.(年月日样本120408)。 我需要昨天的约会。 这个脚本在DOS下

拯救自己一个痛苦的世界,使用更好的语言!

这里是你想在PowerShell中使用的脚本:

 $yesterday = [DateTime]::Today.AddDays(-1).ToString("yyMMdd") copy \\server01\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\ copy \\server02\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\ copy \\server03\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\ copy \\server04\E$\LogFiles\IVR\bcR\??${yesterday}.* \\LBC\workgroup\cs\ftp\Team\bcR\ 

使用这些说明来帮助您安排副本

由于检索昨天的date涉及不同的界限(月,年,闰年),所以它很快变得比想象的要复杂一些。 下面的脚本是这篇文章的一个小修改,取决于你的机器的语言设置(在你的命令行上运行DATE /T )。

 @echo off for /f "tokens=1" %%i in ('date /t') do set thedate=%%i set yy=%thedate:~2,2% set mm=%thedate:~5,2% set dd=%thedate:~8,2% echo Today : %yy%%mm%%dd% if %dd%==08 ( set dd=8 ) else ( if %dd%==09 ( set dd=9 ) ) if %mm%==08 ( set mm=8 ) else ( if %mm%==09 ( set mm=9 ) ) set /A dd=%dd% - 1 set /A mm=%mm% + 0 if /I %dd% GTR 0 goto DONE set /A mm=%mm% - 1 if /I %mm% GTR 0 goto ADJUSTDAY set /A mm=12 set /A yy=%yy% - 1 :ADJUSTDAY if %mm%==1 goto SET31 if %mm%==2 goto LEAPCHK if %mm%==3 goto SET31 if %mm%==4 goto SET30 if %mm%==5 goto SET31 if %mm%==6 goto SET30 if %mm%==7 goto SET31 if %mm%==8 goto SET31 if %mm%==9 goto SET30 if %mm%==10 goto SET31 if %mm%==11 goto SET30 if %mm%==12 goto SET31 goto ERROR :SET31 set /A dd=31 + %dd% goto DONE :SET30 set /A dd=30 + %dd% goto DONE :LEAPCHK set /A tt=%yy% %% 4 if not %tt%==0 goto SET28 set /A tt=%yy% %% 100 if not %tt%==0 goto SET29 set /A tt=%yy% %% 400 if %tt%==0 goto SET29 :SET28 set /A dd=28 + %dd% goto DONE :SET29 set /A dd=29 + %dd% :DONE if /i %dd% LSS 10 set dd=0%dd% if /I %mm% LSS 10 set mm=0%mm% set YESTERDAY=%yy%%mm%%dd% echo Yesterday: %YESTERDAY% 

在cmdbatch file中做这种事纯粹是自虐的。

但在任何其他语言中,这很容易(在cygwin下的bash,可能是powershell;甚至vbscript也可能会使这很容易)。

所以只要使用其他脚本语言来完成,或者写出一个临时batch file并执行它。

perl中的一个例子:

 #!/usr/bin/perl use strict; use Date::Format; my $date = time2str("%y%m%d", time-86400); for ( qw(01 02 03 04) ) { print "copy \\\\server$_\\E\$\\LogFiles\\IVR\\bcR\\??$date.* \\\\LBC\\workgroup\\cs\\ftp\\Team\\bcR\\", "\n"; } 

说它叫做writebatch.pl。 那么你的脚本可能是类似的

 perl writebatch.pl > "%TEMP%\dailycopies.cmd" call "%TEMP%\dailycopies.cmd" 

或者你可以直接从脚本中复制副本。 在Perl中,您可以使用File :: Copy模块。 如果您select任何其他脚本工具,它也将具有一些文件复制function。

如果您的主脚本必须在Windows Shell脚本中,我的解决scheme是获取.CMD文件在%TEMP%中创build一个[小] .VBS文件,然后通过调用cscript.exe来启动它。在for / f命令中。 实际的VBScript可以使用DateDiff 。 我在Windows Server 2003盒子上使用了这种技术,我们还没有默认部署PowerShell。 如果您在Windows NT6平台上,请使用PowerShell。

如果你可以使用powershell,为什么不用这个简单的一行:

 powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\") 

这是一个输出实际年,月,日,时,分和秒的示例。

看最后一部分,它是你想要的格式,所以你可以用你想要的格式来得到它。

它做什么的解释:

  • 使用.ToString()将格式化[DateTime]::Now的输出格式为yyyyMMdd_hhmmss

如果你想在一个bacth文件中,你可以使用for /f "delims="的技巧,看一个例子:

 for /f "delims=" %a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @echo DateTime is: %a 

如果要在.BAT或.CMD文件中使用它,则必须将%加倍,如下所示:

 for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @echo DateTime is: %%a 

Importat注意:^字符是避免看到)最终,与\“这是内部powershell等,这是一个元字符,告诉下一个字符不能被解释。

如果你需要一个批处理variables的date时间,看到这个:

 @ECHO OFF for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @Set MyVariable=%%a ECHO %MyVariable% 

PD:使用powershell有副作用,它改变了CMD的窗口大小和字体(退出后让它们改变),有时也需要几秒钟才能运行这么简单的命令。