Batch file to delete files older than N days

前端 未结 24 2468
没有蜡笔的小新
没有蜡笔的小新 2020-11-21 11:11

I am looking for a way to delete all files older than 7 days in a batch file. I\'ve searched around the web, and found some examples with hundreds of lines of code, and oth

24条回答
  •  孤独总比滥情好
    2020-11-21 11:52

    My script to delete files older than a specific year :

    @REM _______ GENERATE A CMD TO DELETE FILES OLDER THAN A GIVEN YEAR
    @REM _______ (given in _olderthanyear variable)
    @REM _______ (you must LOCALIZE the script depending on the dir cmd console output)
    @REM _______ (we assume here the following line's format "11/06/2017  15:04            58 389 SpeechToText.zip")
    
    @set _targetdir=c:\temp
    @set _olderthanyear=2017
    
    @set _outfile1="%temp%\deleteoldfiles.1.tmp.txt"
    @set _outfile2="%temp%\deleteoldfiles.2.tmp.txt"
    
      @if not exist "%_targetdir%" (call :process_error 1 DIR_NOT_FOUND "%_targetdir%") & (goto :end)
    
    :main
      @dir /a-d-h-s /s /b %_targetdir%\*>%_outfile1%
      @for /F "tokens=*" %%F in ('type %_outfile1%') do @call :process_file_path "%%F" %_outfile2%
      @goto :end
    
    :end
      @rem ___ cleanup and exit
      @if exist %_outfile1% del %_outfile1%
      @if exist %_outfile2% del %_outfile2%
      @goto :eof
    
    :process_file_path %1 %2
      @rem ___ get date info of the %1 file path
      @dir %1 | find "/" | find ":" > %2
      @for /F "tokens=*" %%L in ('type %2') do @call :process_line "%%L" %1
      @goto :eof
    
    :process_line %1 %2
      @rem ___ generate a del command for each file older than %_olderthanyear%
      @set _var=%1
      @rem  LOCALIZE HERE (char-offset,string-length)
      @set _fileyear=%_var:~0,4%
      @set _fileyear=%_var:~7,4%
      @set _filepath=%2
      @if %_fileyear% LSS %_olderthanyear% echo @REM %_fileyear%
      @if %_fileyear% LSS %_olderthanyear% echo @del %_filepath%
      @goto :eof
    
    :process_error %1 %2
      @echo RC=%1 MSG=%2 %3
      @goto :eof
    

提交回复
热议问题