我希望得到关于这个文件的第二个意见。我们从较旧的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
答案 0 :(得分:0)
我记得来自alt.msdos.batch.nt的代码。我甚至可能自己写过......就像SO / Winbatch上的哲学一样,alt.msdos.batch.nt在很大程度上是一种合作努力,建立在其他人的基础之上。想法。它'悲哀地看到,像这样/德尔福方面的消极态度,将高代表专断鼓励与歇斯底里的呼喊&#34讨论;异端!投票吧!投票出来!"
除了日期体操计算日期 - (n天)之外,例行的关键是认识到yy / mm / dd在以后作为字符串比较时增加,前提是不跨越世纪边界
是的 - 它打算删除超过15天的文件。