
這個批處理刪除老文件的為啥我的刪不掉啊但提示成功了文件還在
nclick="copycode($('code0'));">復制代碼
- @echo off&color 1f
- :: 刪除 N 天前“創建”或“修改”的文件
- :: by 小樓一夜聽春雨 @bbs.bathome.net 2007-11-13
- :: 2009-01-09 日更新 (可處理含特殊符號&!的文件(夾)名)
- :: 日期必須是 yyyy-mm-dd 格式
- :: 計算日期部分出自 @cn-dos by will sort
- set f=%date:~4,1%
- for %%a in (wjj c m z cw cuowu leixin tian zml yes) do set %%a=
- :start
- setlocal
- echo&echo請輸入要處理的文件夾全路徑,或拖放文件夾來此窗口。
- echo.&set /p wjj=
- set wjj=%wjj:=%
- if %wjj:~-1%== set wjj=%wjj:~0,-1%
- set wjj=%wjj%&cls
- if not exist %wjj% (
- echo&echo沒有 %wjj% 這個文件夾,請重新輸入。
- endlocal&goto start
- )
- endlocal&set wjj=%wjj%&cls
- :loop1
- setlocal
- title %wjj%
- echo&echo請選擇要刪除的文件類型,c 為創建的文件, w 為修改的文件
- echo.&set /p cw= 請選擇 [ c , w ] ? &cls
- if /i not %cw%==c if /i not %cw%==w set cuowu=a
- if defined cuowu (
- echo&echo輸入錯誤,請重新輸入。
- endlocal&goto loop1
- )
- endlocal&set leixin=/t%cw%
- if /i %leixin%==/tc (set c=創建) else set c=修改&cls
- :loop2
- setlocal
- title 刪除 %wjj% %c% 的文件
- echo&echo請輸入天數,即:需要刪除多少天前 “%c%” 的文件。
- echo.&set /p tian= 請輸入: &cls
- echo %tian%|findstr ^[0-9]*$ >nul|| (
- echo&echo輸入錯誤,必須是純數字,請重新輸入。
- endlocal&goto loop2
- )
- endlocal&set tian=%tian%&cls
- title 刪除 %wjj% %tian% 前 %c% 的文件
- echo&echo請選擇是否處理子目錄, y 是, n 否。
- echo&set /p zml= [ y , n ] ?
- if /i %zml%==y (set zml=/s&set z=(含子目錄)
- ) else set zml=&set z=(不含子目錄)
- call :Date2Day %date% %tian% Day
- cls&color fc
- echo&echo即將刪除 %wjj% 中%z% %Day% 以前 “%c%” 的文件
- echo&echo回車繼續,其它鍵退出。
- echo&set /p yes=
- if defined yes exit
- cls
- title 刪除 %wjj% 中%z% %Day% 以前 “%c%” 的文件
- :::::::::::::::::::: 判斷并刪除文件 ::::::::::::::::::::::::::::::::::
- for /f tokens=* %%i in (
- 'dir /a-d %leixin% %zml% %wjj%^|findstr /b [0-9] ..:'
- ) do (
- for /f tokens=1* delims= %%a in (%%i) do (
- if not %%b== (set ml=%%i) else (
- for /f tokens=1-3* delims= %%c in (%%i) do (
- set str=%%~nxf
- setlocal enabledelayedexpansion
- if exist !ml:~0,-4!!str! (
- if %%c lss %Day% (
- ECHO del/q !ml:~0,-4!!str!
- endlocal&set /a m+=1
- )
- ) else endlocal
- ))))
- color 0a&echo
- if not defined m (echo 文件夾 %wjj% 中沒有 %Day% 以前 %c% 的文件.
- ) else (echo 刪除完成。。。&echo&echo共刪除 %m% 個文件)
- echo&pause&exit
- ::::::::::::::::::::::::::: 計算日期 ::::::::::::::::::::::::::::::::::
- rem 使用方法:call :Date2Day 2007-11-12 2 Day
- rem 變量 Day 就是2007-11-12 減2的結果。
- :Date2Day 計算指定天數 前/后 的日期 (封裝)
- @echo off&setlocal
- for /f tokens=1-3 delims=/-:, %%a in ('echo/%~1') do (
- set /a yy=%%a,mm=100%%b%%100,dd=100%%c%%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
- set /a i=j-%~2,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 %~3=%yy%%f%%mm%%f%%dd%&goto :EOF

