2012-03-28 18 views
0

私はwinzipを使用して昨日の日付をzipファイルに追加しようとしています。 しかし、正しい日付の書式設定に問題があります。
私が代わりにDDMMYYを得るために修正しますスクリプトWindowsのファイル名に日付を追加するバッチ

@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 

このスクリプトはDDMMYYYYの出力が得られ、YYYYとして年を表示し、見つけましたか?または誰でもファイル名にDDMMYY(現在の日付の1日前)を追加する簡単な方法はありますか?

ありがとうございます!

答えて

1

以下のバッチファイルは、現在の日付に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形式で日付を表示することを前提としています。そうでない場合は、少し修正する必要があります。

+0

上記のコードでAaciniをお世話になりました。私のPCで、日付の日付/時刻を示す%date%でテストしましたが、そのような日付形式のコードを編集する必要があるとします。 –

+0

@ overst33r:tokens = 1-3 delims =/"' tokens = 2-4 delims =/"'だけ変更してください。スラッシュの後にスペースがあることに注意してください。 – Aacini

+0

ありがとう@Aacini、それは完璧に働いた!迅速な返信に非常に感謝しています! –

関連する問題