在Windows批处理中将日期添加到文件名

时间:2012-03-28 17:06:50

标签: windows date batch-file formatting cmd

我试图使用winzip将昨天的日期附加到zip文件中。 但是我在获取正确的日期格式时遇到了麻烦 我找到了剧本

@echo off

set yyyy=
set $tok=1-3
for /f "tokens=1 delims=.:/-, " %%u in ('date /t') do set $d1=%%u
if "%$d1:~0,1%" GTR "9" set $tok=2-4
for /f "tokens=%$tok% delims=.:/-, " %%u in ('date /t') do (
 for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do (
    set %%x=%%u
    set %%y=%%v
    set %%z=%%w
    set $d1=
    set $tok=
 )
)

if "%yyyy%"=="" set yyyy=%yy%
if /I %yyyy% LSS 100 set /A yyyy=2000 + 1%yyyy% - 100

set CurDate=%mm%/%dd%/%yyyy%

set dayCnt=%1
if "%dayCnt%"=="" set dayCnt=1

REM Substract your days here
set /A dd=1%dd% - 100 - %dayCnt%
set /A mm=1%mm% - 100

:CHKDAY
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 yyyy=%yyyy% - 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
REM ** Month 12 falls through

:SET31
set /A dd=31 + %dd%
goto CHKDAY

:SET30
set /A dd=30 + %dd%
goto CHKDAY

:LEAPCHK
set /A tt=%yyyy% %% 4
if not %tt%==0 goto SET28

set /A tt=%yyyy% %% 100
if not %tt%==0 goto SET29

set /A tt=%yyyy% %% 400
if %tt%==0 goto SET29

:SET28
set /A dd=28 + %dd%
goto CHKDAY

:SET29
set /A dd=29 + %dd%
goto CHKDAY

:DONE
if /I %mm% LSS 10 set mm=0%mm%
if /I %dd% LSS 10 set dd=0%dd%

echo Date %dayCnt% day(s) before %CurDate% is %dd%%mm%%yyyy%

pause

此脚本将年份显示为YYYY,结果为DDMMYYYY,我在哪里修改以获取DDMMYY?或者有没有人有更简单的方法将DDMMYY(当前日期前1天)附加到文件名中?

提前致谢!

1 个答案:

答案 0 :(得分:2)

下面的批处理文件将1天添加到当前日期并以所需格式显示:

@echo off
setlocal EnableDelayedExpansion
set i=0
for %%d in (31 28 31 30 31 30 31 31 30 31 30 31) do (
   set /A i+=1
   set days[!i!]=%%d
)
for /F "tokens=1-3 delims=/" %%a in ("%date%") do (
   set /A dd=10%%a %% 100+1, mm=10%%b %% 100, yy=%%c %% 100, yyMOD4=yy %% 4
)
if %yyMOD4% equ 0 set days[2]=29
if %dd% gtr !days[%mm%]! (
   set /A dd=1, mm+=1
   if !mm! gtr 12 (
      set /A mm=1, yy+=1
   )
)
if %dd% lss 10 set dd=0%dd%
if %mm% lss 10 set mm=0%mm%
set tomorrow=%dd%%mm%%yy%
echo %tomorrow%
REM ren oldname.ext oldname-%tomorrow%.ext

此批处理文件假定echo %date%以DD / MM / YYYY格式显示日期。如果没有,则需要稍作修改。

相关问题