1 作業流程
1.1 先取得欲刪除檔案集的相關資訊,並輸入5個參數值
1.2 依照取得的參數值,執行欲刪除的檔案
1.3檔案刪除執行後,若目錄為空,則執行刪除該空目錄
2 作業說明
2.1 欲刪除檔案之的相關內容,使用者指定輸入,並設定如下5個參數
PAR1--- 來源資料夾位址, 例D:\BACKUP
PAR2 --- 幾天前檔案欲刪除,例 -30 or -2023/12/31 default=0
PAR3--- 欲刪除檔案之名稱與副檔名 ,例TW*.txt or *高雄* default=*.*
PAR4--- 執行後出力檔案之存放路徑,例D:\BK default=D:\DESTINATION
PAR5--- 刪除作業之判斷,當輸入D 時,執行檔案刪除;
輸入非D 時,不會刪除檔案,只提供確認參考
輸入非D 時,如set PAR5=h , 則不會刪除,只會出力符合條件的file
結果txt出力如下:
**---The below parameters you want to process --- 週五 2024/07/05 15:04:47.59---
**1 Source path :D:\TEST_BK
**2 Date or days :-2024/10/1
**3 Sring of files :*.pptx
**4 Destination path:D:\DESTINATION
ECHO is on.
[ Inquired file list ]
"D:\TEST_BK\新增 Microsoft PowerPoint 簡報.pptx"
**-------------------------------------- Finished at 週五 2024/07/05 15:04:47.66---
其他 參數 設定參考:
set PAR1=D:\TEST_BK
set PAR2=-90
set PAR3=*.mp4*
set PAR4=D:\DESTINATION
set PAR5=D
2.2 刪除作業
* 指定之來源資料夾(PAR1)目錄下包含子目錄下的檔案,若符合就刪除
* 若刪除執行發生錯誤時,仍會繼續不會中斷,且將錯誤訊息出力至txt file供參考
2.3 刪除空目錄作業, 即執行CALL RD_EMPTY_fix-par.cmd
2.3.1 來源目錄下每個目錄,每次執行都會查看是否存在檔案,若該目錄下0個檔案,則執行刪除該目錄
2.3.2 空目錄被刪除後,出力至txt檔案,記錄該目錄名稱
3 實例說明
3.1 來源目錄之指定
本例設定為 set PAR1= D:\TEST_BK
3.2出力檔案名 : Inquiry_error_result.txt
<1>刪檔案錯誤場合
若不能刪除檔案 會列出原因 (因權限關係,無法讀取)
<2>正常刪檔案場合
刪除檔案正常時,txt列出訊息如下:
**---The below parameters you want to process --- 週五 2024/07/05 15:15:20.94---
**1 Source path :D:\TEST_BK
**2 Date or days :-2024/7/31
**3 Sring of files :*.*
**4 Destination path:D:\DESTINATION
ECHO is on.
[ Cannot DEL file ]
**-------------------------------------- Finished at 週五 2024/07/05 15:15:21.12---
<3>找無對象檔案場合,
因為選取日期 +2025/1/1 ,故找無檔案,執行結果出力於 Inquiry_error_result.txt 內容如下:
**---The below parameters you want to process --- 週五 2024/07/05 14:34:47.43---
**1 Source path :D:\TEST_BK
**2 Date or days :+2025/1/1
**3 Sring of files :*.*
**4 Destination path:D:\DESTINATION
ECHO is on.
[ Cannot DEL file ]
ERROR: No files found with the specified search criteria.
**-------------------------------------- Finished at 週五 2024/07/05 14:34:47.56---
3.3 空目錄被刪除後,作業結果訊息出力至txt,empFOLDER_RD.txt內記錄兩個空目錄被刪除,參考如下:
[ Empty folder rased ] ----- on 週五 2024/07/05 14:34:47.57
"D:\TEST_BK\LDPlayer"
"D:\TEST_BK\YunGameDownload\leidian\Plugins"
4 運用效果
4.1定期執行自動刪除作業bat,可節省硬體空間
4.2將bat設定自動排程,刪除檔案之作業,省下人力工時,提升工作效率
5 將來運用
5.1 個人電腦內各個硬碟槽或伺服器公用槽內資料夾,均可比照運用
5.2 各應用系統內各種平日交易檔案,歷史紀錄log檔等,均可比照運用,否則老舊過期檔案一直增加,將使硬碟容量龐大,影響系統效能或致系統異常當機。
6 設計撰寫 :
6.1刪除檔案之 Bat :DelF+RD.bat
rem echo off
CHCP 65001
rem ----本檔案需保存為 UTF-8 ,CHCP 65001 為了顯示特殊字元(漢字日文) 。big5 ,CHCP 950
rem 入力檔目錄需先輸入,出力檔案名 Inquiry_error_result.txt
D:
cd D:\LINCT_material\PC\cmd-bat\cmd\Manipulate_file\Del99
rem ---[Noted] 不可用I槽 set PAR1=I:\99.暫存資料 ,因 schedule task 無法認得 ----
set PAR1=D:\TEST_BK
set PAR2=-2024/7/31
set PAR3=*.*
set PAR4=D:\DESTINATION
set PAR5=D
set PAR_ERR=N
IF NOT EXIST "%PAR1%" (echo ###ERROR : %PAR1% is not exist & set PAR_ERR=Y & goto END )
IF NOT EXIST %PAR4% ( md %PAR4% )
rem pause chk par1:%PAR1% par4:%PAR4% -----
echo **---The below parameters you want to process --- %DATE% %TIME%---> %PAR4%\Inquiry_error_result.txt
echo **1 Source path :%PAR1% >> %PAR4%\Inquiry_error_result.txt
echo **2 Date or days :%PAR2% >> %PAR4%\Inquiry_error_result.txt
echo **3 Sring of files :%PAR3% >> %PAR4%\Inquiry_error_result.txt
echo **4 Destination path:%PAR4% >> %PAR4%\Inquiry_error_result.txt
echo >> %PAR4%\Inquiry_error_result.txt
echo *** Files 執行中...for "%PAR1%" %PAR2% %PAR3% %PAR4% %PAR5%
IF %PAR5% == D ( CALL :DELFile ) else ( CALL :FIND )
:END
:: ---Noted "%PAR1%" 需有" " ,因資料夾名有(),致IF 指令語法錯誤 ---
IF %PAR_ERR% == Y (
echo *** Job ABEND 異常中止 for "%PAR1%" or %PAR4% is not exist---
echo *** Job ABEND 異常中止 for "%PAR1%" or %PAR4% is not exist---> %PAR4%\Inquiry_error_result.txt
) ELSE (
echo *** Files 執行完了 for "%PAR1%" %PAR2% %PAR3% %PAR4% %PAR5%
echo *---Please check result file save in %PAR4%\Inquiry_error_result.txt )
echo **-------------------------------------- Finished at %DATE% %TIME%--->> %PAR4%\Inquiry_error_result.txt
rem pause del end chk??
CALL RD_EMPTY_fix-par.cmd
rem pause job final end
EXIT
:DELFile
:: ---- del file 若成功del 無訊息印出, 只有錯誤有發生時,才會印出 ----
echo. >> %PAR4%\Inquiry_error_result.txt
echo [ Cannot DEL file ] >> %PAR4%\Inquiry_error_result.txt
For /f "tokens=* delims=?" %%A in ( 'forfiles /P "%PAR1%" /S /D %PAR2% /M "%PAR3%" /c "cmd /c del /F /Q /A @path" 2^>^&1 ' ) do ( echo %%A >> %PAR4%\Inquiry_error_result.txt )
exit /b
:FIND
echo. >> %PAR4%\Inquiry_error_result.txt
echo [ Inquired file list ] >> %PAR4%\Inquiry_error_result.txt
:: ---- echo inquiry all file list out, 包括存取被拒的file 也會印出 ----
forfiles /P "%PAR1%" /S /D %PAR2% /M "%PAR3%" /c "cmd /c echo @path ">>%PAR4%\Inquiry_error_result.txt 2^>^&1
exit /b
6.2刪除空目錄之cmd : RD_EMPTY_fix-par.cmd
rem ----本檔案需保存為 UTF-8 ,CHCP 65001 為了顯示特殊字元(漢字日文) -----
rem ---檢查目錄下含子目錄,若為空,則只刪除該下之空目錄 ,並出力 D:\DESTINATION\empFOLDER_RD.txt----
rem @echo on
@echo off
rem CHCP 65001
rem ---注意本for只找出目錄(含子目錄),沒找出file,
rem echo [ Empty folder rased ] ----- on %DATE:~0,4%/%DATE:~5,2%/%DATE:~8,2% >D:\DESTINATION\empFOLDER_RD.txt
echo [ Empty folder rased ] ----- on %DATE% %TIME% >D:\DESTINATION\empFOLDER_RD.txt
echo. >>D:\DESTINATION\empFOLDER_RD.txt
set /a n=0
set n_p1=N
:: ----PAR1 FIX 取得 -------
:Enter_par1
IF NOT EXIST "%PAR1%" ( echo ###ERROR : %PAR1% path is not exist & goto EOF )
for /f "delims=" %%i in ('dir "%PAR1%" /ad /b /s') do CALL :AAA "%%i"
if %n_p1%==N ( CALL :RD_Process "%PAR1%" )
echo --- To check RD result in D:\DESTINATION\empFOLDER_RD.txt-----
exit /b
rem goto EOF
rem ---找出的目錄內 存有的目錄與檔案共有幾個file,若0個,即是為空目錄,則 rase dir ---------
rem ---需有"delims=" 又 參數 %%i必須加" ", 這樣目錄名/檔名有空白,才可完整取出 ----
:AAA
set n_p1=Y
set /a n=0
for /f "delims=" %%j in ('dir %1 /a /b ' ) do ( set /a n=n+1 )
if %n%==0 ( CALL :RD_Process %1 )
exit /b
:RD_Process
RD %1
echo %1 >>D:\DESTINATION\empFOLDER_RD.txt
echo ====== To check dir=%1 , file cnt=%n% , PAR1_ALL_emp=%n_p1%
exit /b
:EOF
rem pause --- job is normal end
6.3 bat檔案需保存為 UTF-8 ,cmd 追加CHCP 65001 為了能正常顯示特殊字元漢字或日文
------by linct-------