确认Windows批处理文件例程删除设置目录中的文件

时间:2014-09-19 22:11:33

标签: windows batch-file

我希望得到关于这个文件的第二个意见。我们从较旧的Windows 2003 Web服务器移动并运行从Windows任务计划程序执行的此文件。

从我的评论和研究中,这个批处理文件扫描目录" c:\ Backup"并根据设定的日期删除文件。如果文件超过15天,则会删除该文件。

我的评估是否正确?我不是在寻找逐行审核,只是概述确认会很棒。

        @echo off

    setlocal

    set srcDir="C:\Backup"
    set dirMask=*.*

    if not "%1"=="" set srcDir=%1

    if not exist "%srcDir%" echo Directory %srcDir% does not exist.&goto :EOF

    call :GETPARTS "%date%

    call :SUBTRACTDAYS 15

    set cutoffDate=%yy%/%mm%/%dd%

    pushd.

    cd /D %srcDir%

    for /f "delims=" %%a in ('dir /b /a-d %dirMask%') do call :PROCESS "%%a" %%~ta

    popd

    goto :EOF

    :PROCESS

    call :GETPARTS %2

    REM ** Remove echo from the statement below to enable the actual process
    if /i "%cutoffDate%" GTR "%yy%/%mm%/%dd%" del %1

    goto :EOF

    :SUBTRACTDAYS

    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 DONESUBTRACT

    set /A mm=%mm% - 1

    if /I %mm% GTR 0 goto ADJUSTDAY

    set /A mm=12
    set /A yy=%yy% - 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=%yy% %% 4

    if not %tt%==0 goto SET28

    set /A tt=%yy% %% 100

    if not %tt%==0 goto SET29

    set /A tt=%yy% %% 400

    if %tt%==0 goto SET29

    :SET28

    set /A dd=28 + %dd%

    goto CHKDAY

    :SET29

    set /A dd=29 + %dd%

    goto CHKDAY

    :DONESUBTRACT

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

    goto :EOF

    :GETPARTS

    set dt=%~1
    set tok=1-3

    if "%dt:~0,1%" GTR "9" set tok=2-4

    set yyyy=

    for /f "tokens=%tok% delims=.:/-, " %%a in ('echo %~1') do (
      for /f "skip=1 tokens=2-4 delims=/-,()." %%x in ('echo.^|date') do set %%x=%%a&set %%y=%%b&set %%z=%%c
    )

    if not "%yyyy%"=="" set yy=%yyyy%

    if 1%yy% LSS 1000 (if %yy% LSS 70 (set yy=20%yy%) else (set yy=19%yy%))
    if 1%mm% LSS 100 set mm=0%mm%
    if 1%dd% LSS 100 set dd=0%dd%

    goto :EOF

1 个答案:

答案 0 :(得分:0)

我记得来自alt.msdos.batch.nt的代码。我甚至可能自己写过......就像SO / Winbatch上的哲学一样,alt.msdos.batch.nt在很大程度上是一种合作努力,建立在其他人的基础之上。想法。它'悲哀地看到,像这样/德尔福方面的消极态度,将高代表专断鼓励与歇斯底里的呼喊&#34讨论;异端!投票吧!投票出来!"

除了日期体操计算日期 - (n天)之外,例行的关键是认识到yy / mm / dd在以后作为字符串比较时增加,前提是不跨越世纪边界

是的 - 它打算删除超过15天的文件。