我需要你的帮助来创建一个批处理文件,它将昨天的日期附加到它的文件名,例如:
Filename.xls将更改为YYYYMMDD_Filename.xls,其中YYYYMMDD是昨天的日期。我试图这样做却失败了,因为我需要监控日期变化,如闰年等。
感谢您的帮助!
答案 0 :(得分:0)
这只是减去日期的一种方法。它使用一个巧妙的小技巧与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
答案 1 :(得分:0)
这是一个深奥且神秘的日期减法方法,分为3行编写,只是练习set /A
算术表达式和子串替换: ;)
@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
这种方法每4年正确管理闰年,但不是每400年取消一次,虽然很简单就添加了这样的功能......
答案 2 :(得分:0)
管理以使其正常工作
echo wsh.echo date-1> %temp%\ tmp.vbs for / f“tokens = 1-3 delims = /”%% a in('cscript.exe // nologo%temp%\ tmp.vbs')do(set mm = 0 %% a& ; set dd = 0 %% b& set yr = %% c)del%temp%\ tmp.vbs COPY C:\ TEST \ Champ54321.xls C:\ TEST2 \%yr %% mm:〜-2 %% dd :〜-2%_Champ12345.xls / Y
谢谢!