如何批量创建昨天的日期

如何批量创建昨天的日期
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]::NowyyyyMMdd_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。

相关内容