可批次刪除 N 天前的檔案
參考資料
Windows批次檔利用forfiles依時間清除備份檔
forfiles用批次檔案刪除N天前的檔TIPS-在 Windows 批次刪除 N 天前的檔案
======================================================================
轉載至 Windows批次檔利用forfiles依時間清除備份檔
創建一個記事本貼上程式碼之後另存新檔
存檔類型選所有檔案,副檔名為bat,就可以直接執行使用。
目標路徑檔案越多則程式執行越久,視窗關閉代表執行結束。
存檔類型選所有檔案,副檔名為bat,就可以直接執行使用。
目標路徑檔案越多則程式執行越久,視窗關閉代表執行結束。
PS:刪除的檔案不會出現在回收桶,使用之前請確認好設定。
程式碼舉例:
c:\windows\system32\forfiles /p F:\ /s /d -90 /m *.* /c "cmd /c del @file"
c:\windows\system32\forfiles /p F:\ /s /d -90 /m *.txt /c "cmd /c del @file"
以上指令是搜尋F槽包含資料夾內超過系統作業時間90天以上副檔名txt的檔案進行刪除
可以自己依造需求更改。
/p 表示要開始搜尋的路徑,預設為檔案目前資料夾路徑。
/s forfiles 遞迴搜尋子目錄。
/d [{+ | - }] [{MM / DD / YYYY | DD }]選擇日期大於或等於( + ) (或者小於或等於( - ) )指定日期的文件,其中MM /DD/YYYY是指定的日期, DD是當前日期減去DD天如果未指定+或 - ,則使用+ .DD的有效範圍是0 - 32768 。
/m 根據 searchmask 搜尋檔案。預設為*不限制。
/c 在每個文件上運行指定的命令,帶有空格的命令字符串必須用引號括起來,默認的命令是 "cmd /c echo @file"
======================================================================
轉載至 forfiles用批次檔案刪除N天前的檔
以下測試作業系統為 Windows Server 2003,它有一個forfiles命令能夠查找滿足指定條件的檔,下面是這個命令的用法。
forfiles /p <目標目錄名> /d <天數> /c <執行的命令>
看看列出的三個參數都有什麼用處:
/p 指定了要在哪個目錄裏查找檔,默認是當前工作目錄,注意不能在目錄名後面加斜杠。
/d 指定一個日期或天數,用於比較檔的最後修改日期是否符合條件。
/c 對每個找到的檔執行的命令。
例1.要把在E槽根目錄下最後修改日期大於或等於2009年7月1日的檔複製到F盤根目錄下:
forfiles /p "e:" /d "2009-7-1" /c "cmd /c copy @path f:\"
例2.刪除在E槽backup目錄下最後修改日期在10天前的檔:
forfiles /p "e:\backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"
看了上面的例子,覺得在 Windows Server 2003 下面要刪除老檔很簡單吧。
但如果作業系統是 Windows 2000/XP 就比較麻煩,因為它們沒有forfiles命令,只能靠自己寫批次處理來實現了。
關於forfiles和for的詳細資訊,可以在Windows的幫助與支持中找到。
forfiles指令介紹
在 WINDOWS 下, 若是要將某些檔案做什麼處理的方式, 我通常使用 VBS 的 SCRIPT 來操作, 不過其實還有更方便簡捷的方法, 看到介绍 windows server下的檔案處理程式Forfiles , 原來其實在 windows 下還有個這麼方便的檔案列舉工具.
一般最常用的是刪除 log 檔案, 指定目錄, 並指令時間 (例如保留一週, 一週前的刪除), 就可以利用這個指令進行刪除:
forfiles /p c:\temp /s /m *.log /d -7 /c "cmd /c del @FILE"
或是列舉出指定目錄下的檔案(非目錄)的名稱列出:
forfiles /p c:\ /c "cmd /c if @isdir==FALSE echo @FILE"
請注意上面的 "FALSE" 要大寫!
forfiles /p <目標目錄名> /d <天數> /c <執行的命令>
看看列出的三個參數都有什麼用處:
/p 指定了要在哪個目錄裏查找檔,默認是當前工作目錄,注意不能在目錄名後面加斜杠。
/d 指定一個日期或天數,用於比較檔的最後修改日期是否符合條件。
/c 對每個找到的檔執行的命令。
例1.要把在E槽根目錄下最後修改日期大於或等於2009年7月1日的檔複製到F盤根目錄下:
forfiles /p "e:" /d "2009-7-1" /c "cmd /c copy @path f:\"
例2.刪除在E槽backup目錄下最後修改日期在10天前的檔:
forfiles /p "e:\backup" /d -10 /c "cmd /c echo deleting @file ... && del /f @path"
看了上面的例子,覺得在 Windows Server 2003 下面要刪除老檔很簡單吧。
但如果作業系統是 Windows 2000/XP 就比較麻煩,因為它們沒有forfiles命令,只能靠自己寫批次處理來實現了。
關於forfiles和for的詳細資訊,可以在Windows的幫助與支持中找到。
forfiles指令介紹
在 WINDOWS 下, 若是要將某些檔案做什麼處理的方式, 我通常使用 VBS 的 SCRIPT 來操作, 不過其實還有更方便簡捷的方法, 看到介绍 windows server下的檔案處理程式Forfiles , 原來其實在 windows 下還有個這麼方便的檔案列舉工具.
一般最常用的是刪除 log 檔案, 指定目錄, 並指令時間 (例如保留一週, 一週前的刪除), 就可以利用這個指令進行刪除:
forfiles /p c:\temp /s /m *.log /d -7 /c "cmd /c del @FILE"
或是列舉出指定目錄下的檔案(非目錄)的名稱列出:
forfiles /p c:\ /c "cmd /c if @isdir==FALSE echo @FILE"
請注意上面的 "FALSE" 要大寫!
轉載至 TIPS-在 Windows 批次刪除 N 天前的檔案
刪除30天以前的Log檔可以寫成:
forfiles /p D:\Logs\IISLogs /s /m *.log /d –30 /c "cmd /c del @path"
另外我也發現,forfiles 很適合解決之前提過將 DIR 結果轉為檔案清單的需求,還省去 Replace 計算相對路徑的功夫,是更好的選擇:
forfiles /p D:\Set9527 /s /c "cmd /c echo @relpath"
========================================================================
/P pathname 表示要開始搜尋的路徑。
/S 指示 forfiles 遞迴搜尋子目錄。例如 "DIR /S"。
/M searchmask 根據 searchmask 搜尋檔案。預設的 searchmask 是 '*'。
FORFILES /P C:\WINDOWS /S /M DNS*.*
/S 指示 forfiles 遞迴搜尋子目錄。例如 "DIR /S"。
/M searchmask 根據 searchmask 搜尋檔案。預設的 searchmask 是 '*'。
/C command 表示每個檔案要執行的命令。命令字串應該包含在雙括(雙引號吧!)號之間。
@file - 傳回檔案的名稱。
FORFILES /S /M *.txt /C "cmd /c type @file | more"
FORFILES /P C:\ /S /M *.bat
/D date 選取檔案上次修改的時間大於或等於 (+) 、小於或等於 (-),
使用 "yyyy/MM/dd" 格式指定的日期;
或選取檔案上次修改的時間大於或等於 (+)目前的日期再加上 "dd" 天、
小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
/C command 表示每個檔案要執行的命令。命令字串應該包含在雙括(雙引號吧!)號之間。
@path - 傳回檔案的完整路徑。
cmd /c 執行字串中所描述的命令然後結束命令視窗
FORFILES /D -30 /M *.exe /C "cmd /c echo @path 0x09 was changed 30 days ago"
/D date 選取檔案上次修改的時間大於或等於 (+) 、小於或等於 (-),
使用 "yyyy/MM/dd" 格式指定的日期;
或選取檔案上次修改的時間大於或等於 (+)目前的日期再加上 "dd" 天、
小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
/C command 表示每個檔案要執行的命令。命令字串應該包含在雙括(雙引號吧!)號之間。
@fname - 只傳回檔案的名稱,不傳回副檔名。
FORFILES /D 2001/01/01 /C "cmd /c echo @fname is new since Jan 1st 2001"
/D date 選取檔案上次修改的時間大於或等於 (+) 、小於或等於 (-),
使用 "yyyy/MM/dd" 格式指定的日期;
或選取檔案上次修改的時間大於或等於 (+)目前的日期再加上 "dd" 天、
小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
/C command 表示每個檔案要執行的命令。命令字串應該包含在雙括(雙引號吧!)號之間。
@fname - 只傳回檔案的名稱,不傳回副檔名。
FORFILES /D +2019/1/16 /C "cmd /c echo @fname is new today"
/M searchmask 根據 searchmask 搜尋檔案。預設的 searchmask 是 '*'。
/D date 選取檔案上次修改的時間大於或等於 (+) 、小於或等於 (-),
使用 "yyyy/MM/dd" 格式指定的日期;
或選取檔案上次修改的時間大於或等於 (+)目前的日期再加上 "dd" 天、
小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
FORFILES /M *.exe /D +1
/C command 表示每個檔案要執行的命令。命令字串應該包含在雙括(雙引號吧!)號之間。
@fsize - 傳回檔案的大小,單位是位元組。
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
刪除pdf檔案
/P pathname 表示要開始搜尋的路徑。
/S 指示 forfiles 遞迴搜尋子目錄。例如 "DIR /S"。
/M searchmask 根據 searchmask 搜尋檔案。預設的 searchmask 是 '*'。
/D 選取檔案上次修改的時間小於或等於 (-) 目前的日期減去 "2" 天。
/C command 表示每個檔案要執行的命令。命令字串應該包含在雙括(雙引號吧!)號之間。
@path - 傳回檔案的完整路徑。
cmd /c 執行字串中所描述的命令然後結束命令視窗
forfiles /P D:\aaa\temp /S /M *.pdf /D -2 /C "cmd /c del @path"
/P pathname 表示要開始搜尋的路徑。
C:\Users\mark.liu\Music>forfiles /P C:\Users\mark.liu\Music
"desktop.ini"
"Playlists"
/P pathname 表示要開始搜尋的路徑。
C:\Users\mark.liu\Music>forfiles /P C:\Users\mark.liu\Music
"desktop.ini"
"Playlists"
"新文字文件.txt"
/P pathname 表示要開始搜尋的路徑。
/S 指示 forfiles 遞迴搜尋子目錄。例如 "DIR /S"。
C:\Users\mark.liu\Music>forfiles /P C:\Users\mark.liu\Music /S
"desktop.ini"
"Playlists"
"新文字文件.txt"
"烏克.wpl"
"聽01.wpl"
========================================================================
forfiles /?
FORFILES [/P pathname] [/M searchmask] [/S]
[/C command] [/D [+ | -] {yyyy/MM/dd | dd}]
描述:
選取一個檔案 (或一組檔案),並在檔案上
執行命令。這對批次工作很有幫助。
參數清單:
/P pathname 表示要開始搜尋的路徑。
預設資料夾是目前的
目錄 (.)。
/M searchmask 根據 searchmask 搜尋檔案。
預設的 searchmask 是 '*'。
/S 指示 forfiles 遞迴搜尋
子目錄。例如 "DIR /S"。
/C command 表示每個檔案要執行的命令。
命令字串應該包含在雙括號
之間。
預設的命令是 "cmd /c echo @file"。
下列變數可以使用於命令字串:
@file - 傳回檔案的名稱。
@fname - 只傳回檔案的名稱,
不傳回副檔名。
@ext - 只傳回檔案的
副檔名。
@path - 傳回檔案的完整路徑。
@relpath - 傳回檔案的相對
路徑。
@isdir - 如果檔案類型是目錄的話,
傳回 "TRUE",如果是檔案
的話,傳回 "FALSE"。
@fsize - 傳回檔案的大小,
單位是位元組。
@fdate - 傳回檔案上次修改的
日期。
@ftime - 傳回檔案上次修改
的時間。
要在命令列中包含特殊字元的話,
請使用 0xHH 格式的十六
進位字元碼 (例如 0x09 代表 tab)。
內部的 CMD.exe 命令應該
以 "cmd /c" 執行。
/D date 選取檔案上次修改的時間大於或
等於 (+) 、小於或等於 (-),
使用 "yyyy/MM/dd" 格式指定的日期;
或選取檔案上次修改
的時間大於或等於 (+)
目前的日期再加上 "dd" 天、
小於或等於 (-) 目前的日期減去 "dd" 天。
有效的 "dd" 可以是介於
0 - 32768 之間的數字。
如果未指定,"+" 將被視為預設符號。
/? 顯示這個說明訊息。
範例:
FORFILES /?
FORFILES
FORFILES /P C:\WINDOWS /S /M DNS*.*
FORFILES /S /M *.txt /C "cmd /c type @file | more"
FORFILES /P C:\ /S /M *.bat
FORFILES /D -30 /M *.exe
/C "cmd /c echo @path 0x09 was changed 30 days ago"
FORFILES /D 2001/01/01
/C "cmd /c echo @fname is new since Jan 1st 2001"
FORFILES /D +2019/1/16 /C "cmd /c echo @fname is new today"
FORFILES /M *.exe /D +1
FORFILES /S /M *.doc /C "cmd /c echo @fsize"
FORFILES /M *.txt /C "cmd /c if @isdir==FALSE notepad.exe @file"
沒有留言:
張貼留言