DOS命令列刪除N天以前的檔案

2021-05-24 01:22:32 字數 4187 閱讀 2923

dos命令列刪除n天以前的檔案

deloldfile.cmd

:: deloldfile.cmd - 刪除指定日期前的所有檔案

:: climbing - 2005-8-26 - cmd@winxp

@echo off

if "%1"=="" goto _usage

set dst=./.

if not "%2"=="" if exist %2/. (set dst=%2/.) else (goto _err1)

for /r %dst% %%f in (*.*) do if %%~tf lss %1 del /f /q %%f && echo 刪除 %%f

goto _quit

:_usage

echo deloldfile.cmd   - 刪除指定目錄指定日期以前的所有檔案

echo version 1.0 copyleft by climbing

echo 語法: deloldfile ^《日期^>  [目標目錄]

echo         ^《日期^>   必須指定的引數,日期格式為:%date%,該日期前的檔案都會被刪除(不含該日期)

echo         [目標目錄]  可選引數,指定要刪除檔案的目錄,預設為當前目錄

goto _quit

:_err1

echo 錯誤:指定的%2目錄不存在!

:_quit

set dst=

:end

datedel2_for_2k3.bat

:: datedel2.bat - 刪除指定路徑下指定日數以前修改的檔案

:: will sort - 2005-9-2 - cmd@winxp

:: 注意事項:引數%1指定日數,昨天為1,前天為2,依次類推

::           引數%1指定檔案路徑,省略時將處理當前路徑

:: 核心演算法:ritchie lawrence, updated 2002-08-13. version 1.1

::@echo off & setlocal enableextensions

call :date2day %date:~0,10% sdays

set /a sdays-=%1

call :day2date %sdays% difdate

echo 將刪除 %cd% 下 %difdate% 前的修改的以下檔案:

for /r %2 %%f in (*.*) do if "%%~tf" leq "%difdate%" del /f /q %%f && echo 刪除 %%f

goto :eof

:date2day

setlocal enableextensions

for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (

set yy=%%a & set mm=%%b & set dd=%%c

)set /a dd=100%dd%%%100,mm=100%mm%%%100

set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2

set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633

endlocal&set %2=%j%&goto :eof

:day2date

setlocal enableextensions

set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a

set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5

set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10

(if %mm% lss 10 set mm=0%mm%)&(if %dd% lss 10 set dd=0%dd%)

endlocal&set %2=%yy%-%mm%-%dd%&goto :eof

datedel2_for_win2k.bat

:: datedel2.bat - 刪除指定路徑下指定日數以前修改的檔案

:: will sort - 2005-9-2 - cmd@winxp

:: 注意事項:引數%1指定日數,昨天為1,前天為2,依次類推

::           引數%1指定檔案路徑,省略時將處理當前路徑

:: 核心演算法:ritchie lawrence, updated 2002-08-13. version 1.1

::@echo off & setlocal enableextensions

call :date2day %date:~4,10% sdays

set /a sdays-=%1

call :day2date %sdays% difdate

echo 將刪除 %cd% 下 %difdate% 前的修改的以下檔案:

for /r %2 %%f in (*.*) do if "%%~tf" leq "%difdate:~2,14%" del /f /q %%f && echo 刪除 %%f

goto :eof

:date2day

setlocal enableextensions

for /f "tokens=1-3 delims=/-, " %%a in ('echo/%1') do (

set yy=%%a & set mm=%%b & set dd=%%c

)set /a dd=100%dd%%%100,mm=100%mm%%%100

set /a z=14-mm,z/=12,y=yy+4800-z,m=mm+12*z-3,j=153*m+2

set /a j=j/5+dd+y*365+y/4-y/100+y/400-2472633

endlocal&set %2=%j%&goto :eof

:day2date

setlocal enableextensions

set /a i=%1,a=i+2472632,b=4*a+3,b/=146097,c=-b*146097,c/=4,c+=a

set /a d=4*c+3,d/=1461,e=-1461*d,e/=4,e+=c,m=5*e+2,m/=153,dd=153*m+2,dd/=5

set /a dd=-dd+e+1,mm=-m/10,mm*=12,mm+=m+3,yy=b*100+d-4800+m/10

(if %mm% lss 10 set mm=0%mm%)&(if %dd% lss 10 set dd=0%dd%)

endlocal&set %2=%yy%-%mm%-%dd%&goto :eof

使用方法

::deloldfile.cmd

::刪除固定日期前的檔案

::win2003語法

deloldfile.cmd 2008-01-05 d:/conf

::win2000語法

deloldfile.cmd 08-01-05 d:/conf

::將變數擴充套件到檔案的日期/時間

for /r d:/conf %i in (test.txt) do set tt=%~ti

::win2003結果

tt=2008-01-10 00:33

::win2000結果

tt=08-01-10 00:33

::datedel2.bat

::統一語法

::刪除指定路徑下指定日數以前修改的檔案

::set /a將日期與相對天數進行相互換算,以求得差值日期

::刪除昨天前修改的檔案(包含昨天)

datedel2.bat 1 d:/conf

::注意根據不同系統修改相應的date擴充套件變數

deloldfile.cmd 2008-01-05 d:/conf

::win2003 date擴充套件變數

echo %date:~0,10%

2009-01-06

::win2000 date擴充套件變數

echo %date:~4,10%

2009-01-06

::win2000 下需要擴充套件這個difdate變數以適應for命令的檔案日期時間擴充套件變數

%difdate:~2,14%

09-01-06

DOS命令刪除N天以前的檔案

forfiles p pathname m searchmask s c command d 描述 選擇乙個檔案 或一組檔案 並在那個檔案上 執行乙個命令。這有助於批處理作業。引數列表 p pathname 表示開始搜尋的路徑。預設資料夾是當前工作的目錄 m searchmask 根據搜尋掩碼搜尋檔...

linux命令列刪除N天前的資料的命令

命令 find mtime n type f name log.exec rm f 簡單解釋 find 查詢 mtime 規定時間的乙個引數,固定格式 n n是指n天前 type f 型別檔案 name 名稱 log.要刪除的檔案的字尾名稱,如果是刪除全部,可以寫 exec rm f 固定格式,遞迴...

DOS命令列的學習

dos命令列究竟有多大用處呢?可以這樣來解釋 整個windows作業系統不過就是命令提示符的乙個圖形外殼罷了,dos命令列無論何時都是微軟系統的核心部分,能做許許多多事 做windows做不了的事,做windows做不好的事,做windows拒絕做的事。那麼dos命令有多少呢?執行cmd命令提示符,...