如果在DOS下,想用Batch Script刪除某個目錄下幾天前的檔案或目錄,可以用以下的範例來做。
這是針對檔案在中文Windows XP下所寫得範例,如果要刪除目錄還要依照裡頭的說明修改一下才行。
:: --------DELOLD.BAT----------
@echo off
SET OLDERTHAN=%1
SET PATHFILES=%2
IF NOT DEFINED OLDERTHAN GOTO SYNTAX
IF NOT DEFINED PATHFILES GOTO SYNTAXfor /f "tokens=1" %%i in ('date /t') do set thedate=%%i
set mm=%thedate:~5,2%
set dd=%thedate:~8,2%
set yyyy=%thedate:~0,4%set /A dd=%dd% - %OLDERTHAN%
set /A mm=%mm% + 0if /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
if %mm%==12 goto SET31goto ERROR
:SET31
set /A dd=31 + %dd%
goto DONE:SET30
set /A dd=30 + %dd%
goto DONE: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 DONE:SET29
set /A dd=29 + %dd%:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%:: +*************************************+
:: | Deleted Directory use " for /D " |
:: | and change below ECHO %FileName% to |
:: | RMDIR /S /Q %FileName% |
:: +*************************************+
for %%i in ( %PATHFILES% ) do (
set FileName=%%i
call :PROCESSFILE %%~ti
)set mm=
set yyyy=
set dd=
set thedate=
goto EXIT:SYNTAX
ECHO.
ECHO USAGE:
ECHO DELOLD X "path and files"
ECHO Where X is the number of days previous to Today.
ECHO.
ECHO EX: "DELOLD 5 C:\temp\*.* " Deletes files older than 5 days in C:\temp.
GOTO EXIT:PROCESSFILE
set temp=%1
set fyyyy=%temp:~0,4%
set fmm=%temp:~5,2%
set fdd=%temp:~8,2%:: +*************************************+
:: | This is where the files are deleted |
:: | Change the ECHO command to DEL to |
:: | delete. ECHO is used for test. |
:: +*************************************+
if /I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (
ECHO %FileName%
)set temp=
set fyyyy=
set fmm=
set fdd=:EXIT
:: ----------END-DELOLD.BAT-------------
以下是針對檔案在英文Windows NT下所寫得範例,如果要刪除目錄還要依照裡頭的說明修改一下才行。
:: --------DELOLD.BAT----------
@echo off
SET OLDERTHAN=%1
SET PATHFILES=%2
IF NOT DEFINED OLDERTHAN GOTO SYNTAX
IF NOT DEFINED PATHFILES GOTO SYNTAXfor /f "tokens=2" %%i in ('date /t') do set thedate=%%i
set mm=%thedate:~0,2%
set dd=%thedate:~3,2%
set yyyy=%thedate:~6,4%set /A dd=%dd% - %OLDERTHAN%
set /A mm=%mm% + 0if /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
if %mm%==12 goto SET31goto ERROR
:SET31
set /A dd=31 + %dd%
goto DONE:SET30
set /A dd=30 + %dd%
goto DONE: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 DONE:SET29
set /A dd=29 + %dd%:DONE
if /i %dd% LSS 10 set dd=0%dd%
if /I %mm% LSS 10 set mm=0%mm%:: +*************************************+
:: | Deleted Directory use " for /D " |
:: | and change below ECHO %FileName% to |
:: | RMDIR /S /Q %FileName% |
:: +*************************************+
for %%i in ( %PATHFILES% ) do (
set FileName=%%i
call :PROCESSFILE %%~ti
)set mm=
set yyyy=
set dd=
set thedate=
goto EXIT:SYNTAX
ECHO.
ECHO USAGE:
ECHO DELOLD X "path and files"
ECHO Where X is the number of days previous to Today.
ECHO.
ECHO EX: "DELOLD 5 C:\temp\*.* " Deletes files older than 5 days in C:\temp.
GOTO EXIT:PROCESSFILE
set temp=%1
set fyyyy=%temp:~6%
if /I %fyyyy% GTR 2069 set fyyyy=19%temp:~6%
set fmm=%temp:~0,2%
set fdd=%temp:~3,2%:: +*************************************+
:: | This is where the files are deleted |
:: | Change the ECHO command to DEL to |
:: | delete. ECHO is used for test. |
:: +*************************************+
if /I %yyyy%/%mm%/%dd% GEQ %fyyyy%/%fmm%/%fdd% (
ECHO %FileName%
)set temp=
set fyyyy=
set fmm=
set fdd=:EXIT
:: ----------END-DELOLD.BAT-------------
0 意見:
張貼留言