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
Random Solutions  
 
programming4us programming4us