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命令提示符,...