產生篩選條件後的檔案列表

Spread the love

【聲明】本站任何文章都可能有聯盟行銷連結,當你透過文章內的連結購買產品,我可能獲得分潤,這不會增加你任何成本,並且我分享的都是自己實際使用過的資訊,更多細節請點這裡。 Disclosure: Any post on this site may contain affiliate links, meaning I get commission if you decide to make a purchase through my links, at no cost to you.


google到的部落格其實是為了批次刪除久遠檔案,
如何使用批次檔自動篩選並刪除數天前的檔案
而他的轉貼原本來自蔚藍部落(已經沒了):https://4i4u.com/blog/Windows-forfiles-bat/
使用同樣的指令配合不同的參數,
我限定修改日期,以獲得剛剛做完大量尋找與取代的檔案列表,

在WIN7底下使用命令提示字元限定修改的檔案日期
forfiles /P C:\AppServ\www\multi /S /C “cmd /c echo @relpath” /D “2013/05/01”
/P 就是路徑(path),所以後面跟著絕對路徑
/S 是子目錄(SUB)
/C 命令(cmd) @relpath是列出相對路徑,改用@path就會列出完整路徑了
/D 日期(Date) 我沒有去仔細看是否能指定到時分秒
用了偷吃步,從電腦右下角調整日期成”2013/05/01″之後再進行整個本機網站的尋找與取代
取代完畢再把日期調整回正確的,
之後使用指令產生檔案列表,就可以記錄每個改版或重寫步驟的時候到底改了哪些檔案
事實上我原本有找到「EasyFilePrint」這個免費軟體,
但是不曉得為什麼設定了篩選條件以後他還是給我列出所有檔案…
(╯#-_-)╯ ~╩═══════╩
最後還是指令可靠
只有在命令提示字元使用這行指令其實還沒辦法完全解決,
使用指令以後還是要手動把表複製貼上到記事本另存文字檔,
但事實上是能夠做到自動寫出txt的,
就是加上「>」來將結果導出到檔案,
forfiles /P C:\AppServ\www\multiStore /S /C “cmd /c echo @relpath” /D “2013/05/01” > C:\Users\pc\Desktop\list.txt
把這行指令貼到記事本上另存成bat(路徑當然要改),就可以「一鍵」產生,不過不太實用,
因為每次要限定的資料夾跟日期條件都不同啊……
==============================================
底下還是把整個轉貼來源貼上,免得下次我要找的時候它已經消失了
==============================================
以下測試作業系統為 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
以下列出該指令的參數說明: (利用 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" 可以是介於
     &n
bsp;                  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 +2008/7/13 /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”

分享文章
Chaneswin
Chaneswin

【阿淳】漂流過網路行銷、組織行銷、被創業的光環迷惑過,體驗那些未曾想像的驚奇之後,最終的自由卻是擁有澄澈的雙眼、返璞歸真的看世界,我的冒險不在鎂光燈的絢麗舞台,而在迷宮中。把心路歷程化為故事、把工具筆記在雲端。在瞬息萬變的世界裡,慢慢來。
【阿淳的自由生活工具箱】前身小查的白日夢。從腦中的虛幻到真實世界,這裡記錄著一路上不同階段的想法、課程、工具、實踐、挫折,從此放下權威迷思。如果翻出你需要的工具,歡迎隨喜自取、提問討論 :)

文章: 316

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *