|
|
Question : Batch file or script to delete files or folders older than 30 days.
|
|
I currently have a public shared folder that temp users can save files on the network. I need to have a batch file or a script to delete files or folders older than 30 days. Hope someone can write a simple batch or script to help me out. I know how to write very simple batch files for logins etc. But that's pretty much the extent of my knowledge. The folder is on a Windows 2003 server. PCs are all Windows XP.
Now this might be a bit much but here goes: If your feeling patient enough can you write comments to explain each line or section so I know exactly what is happening at each stage?
|
Answer : Batch file or script to delete files or folders older than 30 days.
|
|
@echo off
setlocal
call :GETDATEPARTS "%date%" call :SUBTRACTDAYS 30
set cutoff=%yy%%mm%%dd%
set outFile=%cd%
if not "%outFile:~-1%"=="\" set outFile=%outFile%\
set outFile=%outFile%results.txt
if exist "%outFile%" del "%outFile%" >NUL
set workDir=.
if not "%~1"=="" set workDir=%~1
if not exist "%workDir%" echo %workDir% does not exist&goto :EOF
call :PROCDIR "%workDir%"
if not exist "%outFile%" echo Nothing processed&goto :EOF
echo Results in %outFile%
goto :EOF
:PROCDIR
pushd "%~1"
for /f "tokens=*" %%a in ('dir /ad /b 2^>NUL') do call :PROCDIR "%%a" %%~ta
for /f "tokens=*" %%a in ('dir /a-d /b 2^>NUL') do call :PROCESS file "%%a" %%~ta
set removeDir=
if not "%~2"=="" call :PROCESS dir "%~1" %~2
popd
if "%removeDir%"=="" goto :EOF
rd "%~1" >NUL 2>&1
if exist "%~1" goto :EOF
echo %~1 directory removed echo %~1 directory removed>>"%outFile%"
goto :EOF
:PROCESS
echo %~1 %~2 %~3 %~4
call :GETDATEPARTS "%~3"
if /i "%yy%%mm%%dd%" GTR "%cutoff%" goto :EOF
if "%~1"=="dir" set removeDir=Y&goto :EOF
del /F "%~2">NUL
echo %~2 file removed echo %~2 file removed>>"%outFile%"
goto :EOF :GETDATEPARTS
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
: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 back to top
|
|
|
|