Batch file 如何创建一个批处理文件,将昨天的日期附加到文件名中?

Batch file 如何创建一个批处理文件,将昨天的日期附加到文件名中?,batch-file,Batch File,我需要您帮助创建一个批处理文件,将昨天的日期附加到文件名,例如: Filename.xls将更改为YYYYMMDD_Filename.xls,其中YYYYMMDD是昨天的日期。我正试图这样做,但失败了,因为我需要监测日期的变化,如闰年等 谢谢你的帮助 这只是减去日期的一种方法。它使用xcopy的一个巧妙的小技巧来验证日期。它确实适用于闰年 @echo off setlocal set rand=%random% md "dummy%rand%\empty%rand%" REM Get toda

我需要您帮助创建一个批处理文件,将昨天的日期附加到文件名,例如:

Filename.xls将更改为YYYYMMDD_Filename.xls,其中YYYYMMDD是昨天的日期。我正试图这样做,但失败了,因为我需要监测日期的变化,如闰年等


谢谢你的帮助

这只是减去日期的一种方法。它使用xcopy的一个巧妙的小技巧来验证日期。它确实适用于闰年

@echo off
setlocal
set rand=%random%
md "dummy%rand%\empty%rand%"

REM Get today's date
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"

set /a y=%dt:~0,4%
set /a m=1%dt:~4,2%
set /a d=1%dt:~6,2%

REM set the number of days to substract
SET DAYS=1
FOR /L %%G IN (1,1,%days%) DO CALL :loop

set subdate=%y%%m:~-2%%d:~-2%
echo Yesterday's date is: %subdate%

rd /s /q "dummy%rand%"
pause
endlocal
GOTO :EOF

:loop
  set /a d-=1

  if %d% lss 101 (
    set d=131
    set /a m-=1

    if %m% lss 101 (
      set m=112
      set /a y-=1
    )
  )

xcopy /d:%m:~-2%-%d:~-2%-%y% /t "dummy%rand%\empty%rand%" "dummy%rand%" >nul 2>&1 || goto loop

GOTO :EOF

这是一种深奥而神秘的日期减法,用3行代码编写,仅用于练习set/A算术表达式和子字符串替换:


这种方法每4年正确地管理闰年,但不是每400年取消一次,虽然很简单,但添加了这样一个功能…

成功地使其工作

echo wsh.echo date-1>%temp%\tmp.vbs for/f令牌=1-3 delims=/%a在'cscript.exe//nologo%temp%\tmp.vbs'do set mm=0%%a&set dd=0%%b&set yr=%%c del temp%\tmp.vbs副本c:\TEST Champ54321.xls c:\TEST2\%yr%%mm:~-2%%xldd:~-2%\u Champ12345.s/Y


谢谢

我试着去做,但是失败了。展示你的代码,描述你的失败。否则,您会要求我们为您编写代码。嗨,Abelenky,我的脚本通过以下方式工作:,echo wsh.echo date-1>%temp%\tmp.vbs for/f令牌=1-3 delims=/%a在'cscript.exe//nologo%temp%\tmp.vbs'do set mm=0%%a&set dd=0%%b&set yr=%c del%temp%\tmp.vbs副本c:\TEST\Champ54321.xls c:\TEST2\%yr%%mm:~-2%%xldd:~-2%\u Champ12345.s/YEdit您的问题。不要将代码放在注释中。
@echo off
setlocal

set "DPM=31 28 31 30 31 30 31 31 30 31 30 31"

for /F "tokens=2 delims==" %%a in ('wmic OS Get LocalDateTime /value') do set "dt=%%a"

REM Below code for test the date subtract method
SET /P "DAYS=Days to subtract (one month max): "

:next
set /P "dt=DT: "
if errorlevel 1 goto :EOF

echo Today: %dt:~0,4%/%dt:~4,2%/%dt:~6,2%

set /A "y=%dt:~0,4%, m=1%dt:~4,2%-100, d=1%dt:~6,2%-100-DAYS"
if %d% lss 1 set /A "y-=!(m-=1),n=m+=12*!m,d+=!(n-=1)*%DPM: =+!(n-=1)*%+!(y%%4)*!(m-2)"
set /A "m+=100, d+=100"

echo Yesterday's date is: %y%/%m:~1%/%d:~1%

goto next