Batch file 如何创建一个批处理文件,将昨天的日期附加到文件名中?
我需要您帮助创建一个批处理文件,将昨天的日期附加到文件名,例如: Filename.xls将更改为YYYYMMDD_Filename.xls,其中YYYYMMDD是昨天的日期。我正试图这样做,但失败了,因为我需要监测日期的变化,如闰年等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
谢谢你的帮助 这只是减去日期的一种方法。它使用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