批次檔案刪除n天前的檔案

轉自 http://blog.xuite.net/jenlin.hsu/twblog/135136548-用批次檔案刪除n天前的檔案

Windows 2000/XP:
Windows 2000及XP並未內建Forfiles,可以直接下載for win2k/xp專用的檔案來使用,forfiles命令能夠查找滿足指定條件的檔案,命令用法如下:
forfiles -p”<路徑>” -d"<天數>" -c"<執行命令>"
範例: forfiles -p"d:\backup" -s -m"*.bak" -d"-5" -c"cmd /c del @FILE"
上述的範例為指定刪除backup目錄及子目錄含有.bak檔五天前的檔案
※注意:@FILE必需為大寫

Windows 7/2003/2008:
Windows 7及Windows server 2003/2008已內建forfiles程式,命令用法如下:
forfiles /p”<路徑>” /d"<天數>" /c"<執行命令>"
範例: forfiles /p d:\backup /s /m *.bak /d -5 /c ”cmd /c del @file"

※注意:參數必須為斜線( / ),與windows 2000/xp不同,@file無大小寫區分


=====================================================================
轉自 https://www.facebook.com/permalink.php?id=243233719043132&story_fbid=370701986296304

用批次檔案刪除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命令,只能靠自己寫批次處理來實現了。






















Parameters

/p Path
指定您要在其上開始搜尋的 Path。預設資料夾為目前的工作目錄,您可以透過輸入句點 (.) 來指定。
/m SearchMask
依據 SearchMask 來搜尋檔案。預設的 SearchMask 為 *.*。
/s
指示 forfiles 在子目錄中搜尋。
/c Command
在每個檔案上執行指定的 Command。您必須將帶有空格的命令字串包含在引號中。預設的 Command 為 "cmd /c echo @file"。
/d[{+ | -}] [{MM/DD/YYYY | DD}]
選取日期大於等於 (+) 或小於等於 (-) 指定日期的檔案,其中 MM/DD/YYYY 是指定的日期,而 DD 是目前日期減去 DD 天。如果您未指定 + 或 -,則會使用 +。DD 的有效範圍為 0 - 32768。
/?
在命令提示字元上顯示說明。
Remarks


Forfiles 最常使用於批次檔案中。

Forfiles /s 與 dir /s 類似。

下列表格列出了您可以在 /cCommand 命令字串中使用的變數。
變數
描述
@file
檔案名稱
@fname
不含副檔名的檔案名稱
@ext
副檔名
@path
檔案的完整路徑
@relpath
檔案的相對路徑
@isdir
如果檔案類型是目錄,則判斷值是 TRUE,否則判斷值是 FALSE。
@fsize
檔案大小 (以位元組為單位)
@fdate
檔案上的上次修改日期戳記
@ftime
檔案上的上次修改時間戳記


使 用 forfiles,您可以在多個檔案上執行命令,或將引數傳送到多個檔案。例如,您可以在樹狀目錄中帶有 *.txt 副檔名的所有檔案上執行 TYPE 命令。或者,您可以執行 C: 磁碟機上的每個批次檔案 (*.bat),以檔案名稱 Myinput.txt 作為第一個引數。

使用 forfiles,您可以執行下列任何一項動作:

使用 /d 按絕對或相對日期選取檔案。

使用變數,例如 @fsize (檔案大小) 及 @fdate (檔案日期),來建立檔案的保存樹狀目錄。

使用 @isdir 變數以從目錄中區分檔案。

藉由在命令列中包含特殊字元,及使用十六進位字碼 0xHH 包圍字元,來格式化輸出。

Forfiles 藉由執行工具 (設計用於僅處理單一檔案)上的 recurse subdirectories 旗標來運作。
Examples

若要列出 C: 磁碟機上的所有批次檔案,請輸入:
forfiles /p c:\ /s /m *.bat /c "cmd /c echo @file is a batch file"
若要列出 C: 磁碟機上的所有目錄,請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
若要列出 C: 磁碟機上 100 天之前的所有檔案,請輸入:
forfiles /p c:\ /s /m *.* /dt-100 /c "cmd /c echo @file :date >= 100 days"
若要列出 C: 磁碟機上 1993 年 1 月 1 日之前的所有檔案,再為這些檔案顯示 "file is quite old!",請輸入:
forfiles /p c:\ /s /m *.* /dt-01011993 /c "cmd /c echo @file is quite old!"
若要列出 C: 磁碟機上所有檔案的所有副檔名(按欄位格式),請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c echo extension of @file is 0x09@ext0x09" With:
若要列出 C: 磁碟機上的所有批次檔案,請輸入:
forfiles /p c:\ /s /m *.bat /c "cmd /c echo @file is a batch file"
若要列出 C: 磁碟機上的所有目錄,請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c if @isdir==true echo @file is a directory"
若要列出 C: 磁碟機上 100 天之前的所有檔案,請輸入:
forfiles /p c:\ /s /m *.* /d t-100 /c "cmd /c echo @file :date >= 100 days"
若要列出 C: 磁碟機上 1993 年 1 月 1 日之前的所有檔案,再為這些檔案顯示 "file is quite old!",請輸入:
forfiles /p c:\ /s /m *.* /d t-01011993 /c "cmd /c echo @file is quite old!"
若要列出 C: 磁碟機上所有檔案的所有副檔名(按欄位格式),請輸入:
forfiles /p c:\ /s /m *.* /c "cmd /c echo extension of @file is 0x09@ext0x09"     

#Windows Oracle 相關應用
將7天前的Oracle archived log 資料刪除
C:\forfiles -pE:\oracle\oradata\archivelog -d-7 -c"CMD /C del @FILE"
刪除目錄
forfiles /p "h:\tel" /s /d -122 /c "cmd /c echo deleting @file ... && rmdir /s/q @path"
刪除檔案不含子目錄
forfiles /p "c:\tel"  /d -30 /c "cmd /c echo deleting @file ... && del /f @path"
參考:http://blog.xuite.net/m740138.m740138/blog/126655399-forfiles%E6%8C%87%E4%BB%A4


=======================================================
轉自 http://www.dotblogs.com.tw/killysss/archive/2013/06/10/105423.aspx
 

[DOS]刪除N天前修改的檔案

紀錄一下過程

問題描述

磁碟機空間不夠用,需要清出磁碟空間

解決方式

經分析後將不用的暫存檔案砍掉

暫存檔案分散在固定目錄的子資料夾底下

決定將建立修改日期早於一年的資料檔刪除

實作步驟

寫一隻排程去定期刪除檔案(早於一年份的資料)

原始批次檔如下

1 @title 清除磁碟空間
2 rem   iniPath1:上版檔案的位置1
3 set  iniPath1=E:\Portal\上版資料區
4  
5 attrib -R %iniPath1%\*.* /S /D
6 forfiles /p "%iniPath1%" /s /d -365 /c "cmd /c del /q @path"

發現隱藏及系統檔案無法處理

調整批次檔[在 attrib加入-S(去除系統)及-H(去除隱藏)]如下

1 @title 清除磁碟空間
2 rem   iniPath1:上版檔案的位置1
3 set  iniPath1=E:\Portal\上版資料區
4  
5 attrib -S -H -R  %iniPath1%\*.* /S /D
6 forfiles /p "%iniPath1%" /s /d -365 /c "cmd /c del /q @path"

結果畫面

很成功

參考資料

使用forfiles列出檔案資訊

MS-DOS 錯誤訊息: 未重新設定 System|隱藏的檔案

 

windows:使用forfiles自動批量刪除過期文件

  • Top