如何创建一个将昨天日期附加到其文件名的BatchFile?

时间:2017-03-09 02:38:11

标签: batch-file

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

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

感谢您的帮助!

3 个答案:

答案 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

谢谢!