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\
这是我当前的脚本,我必须每周更改日期。我正在寻找一个脚本,它将查看今天的当前日期减去一天,并可以修改 12 04 28。(年月日示例 120408)。我需要昨天的日期。此脚本在 DOS 中
答案1
让自己免受痛苦,使用更好的语言!
以下是您需要在 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\
使用这些说明帮助您安排复印
答案2
如果您可以使用 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
重要提示:不要使用 ^ 字符,因为将 ) 视为最终字符,与 powershell 等中的 \ 相同。它是一个元字符,表示下一个字符不能被解释。
如果您需要批次中的变量内的日期时间,请参见:
@ECHO OFF
for /f "delims=" %%a in ('powershell -Command [DateTime]::Now.ToString(\"yyyyMMdd_hhmmss\"^)') do @Set MyVariable=%%a
ECHO %MyVariable%
PD:使用 powershell 有副作用,它会改变 CMD 窗口的大小和字体(并在退出后让它们改变),而且有时运行这样简单的命令需要几秒钟。
答案3
由于检索昨天的日期涉及各种边界(月份、年份、闰年),因此它很快就会变得比人们想象的要复杂一些。下面的脚本是对这个帖子并且取决于您的机器语言设置(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%
答案4
如果你的主脚本有在 Windows Shell 脚本中,我的解决方案是让 .CMD 文件在 %TEMP% 中创建一个 [小] .VBS 文件,然后使用调用启动它脚本文件,包裹在对于/f命令。然后实际的 VBScript 可以使用日期差异。我已在 Windows Server 2003 机器上使用过此技术,默认情况下我们没有部署 PowerShell。如果您使用的是 Windows NT6 平台,请使用 PowerShell。