首先幾個預賽:
dir /od /tw /s ..\path\to\somedir
:
列出該目錄中的文件的所有+子目錄,按日期+時間排序的最後修改,
dir /o-d /tw /s ..\path\to\somedir
:
相同,但順序相反(最早的最後一個)。
接下來,我對現有路徑使用本地示例。走吧:
dir /tc /o-d /s gstmp\*yell*.tif ^| findstr 2010
Volume in Laufwerk C: hat keine Bezeichnung.
Volumeseriennummer: D479-1658
Verzeichnis von C:\downloads\gstmp
08/06/2010 05:01 PM 19 compression-g4-emptypage-tiffsep1(Yellow).tif
08/06/2010 05:00 PM 19 compression-lzw-emptypage-tiffsep1(Yellow).tif
08/06/2010 04:57 PM 19 compression-g3-tiffsep1(Yellow).tif
08/06/2010 04:57 PM 19 compression-crle-tiffsep1(Yellow).tif
08/06/2010 04:56 PM 19 compression-pack-share-tiffsep1(Yellow).tif
08/06/2010 04:53 PM 19 compression-g4-share-tiffsep1(Yellow).tif
08/06/2010 04:52 PM 19 compression-lzw-share-tiffsep1(Yellow).tif
08/06/2010 04:51 PM 19 compression-default-share-tiffsep1(Yellow).tif
08/06/2010 03:59 PM 19 compression-none-share-tiffsep.Yellow.tif
08/06/2010 03:55 PM 19 share-tiffsep.Yellow.tif
10 Datei(en) 190 Bytes
我們不喜歡在這一刻額外的標題和摘要信息。我們可以通過過濾某些東西來消除這種情況。我會簡單地使用'2010'。
但n現實問題開始:創建日期和時間可能會以不同的格式打印,具體取決於您的「語言環境」。你可以看到你自己,目前看起來如何。
如果我們能夠以與數字順序完全一致的格式顯示日期,它會不會起作用?然後我們可以通過簡單的數字比較來實現一些關於刪除的邏輯。讓我們試試(如果這對我有用,它不一定適合你 - 你可能需要採用你的語言環境)。請注意, '反引號'( 「``」)我用,還有^ - 符號:
for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif^
^| findstr 2010`) do echo. %I %J %K %L %M %N %O %P
輸出這裏:
08 06 2010 05 01 PM 19 compression-g4-emptypage-tiffsep1(Yellow).tif
08 06 2010 05 00 PM 19 compression-lzw-emptypage-tiffsep1(Yellow).tif
08 06 2010 04 57 PM 19 compression-g3-tiffsep1(Yellow).tif
08 06 2010 04 57 PM 19 compression-crle-tiffsep1(Yellow).tif
08 06 2010 04 56 PM 19 compression-pack-share-tiffsep1(Yellow).tif
08 06 2010 04 53 PM 19 compression-g4-share-tiffsep1(Yellow).tif
08 06 2010 04 52 PM 19 compression-lzw-share-tiffsep1(Yellow).tif
08 06 2010 04 51 PM 19 compression-default-share-tiffsep1(Yellow).tif
08 06 2010 03 59 PM 19 compression-none-share-tiffsep.Yellow.tif
08 06 2010 03 55 PM 19 share-tiffsep.Yellow.tif
快到了,但還沒有完全。我們需要將我們的令牌%I %J %K
的訂單更改爲%K %I %J
,以便我們的日期顯示爲2010 08 06
而不是08 06 2010
。另外,如果我們寫入沒有空格的權限令牌,那麼可以獲取日期+時間字符串,以便輕鬆地進行比較。另外,我們跳過%O
並用箭頭代替它,只是爲了好玩:
for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif^
^| findstr 2010`) do echo. %K%I%J%L%M%N ==^> %P
現在輸出更改爲:
201008060501PM ==> compression-g4-emptypage-tiffsep1(Yellow).tif
201008060500PM ==> compression-lzw-emptypage-tiffsep1(Yellow).tif
201008060457PM ==> compression-g3-tiffsep1(Yellow).tif
201008060457PM ==> compression-crle-tiffsep1(Yellow).tif
201008060456PM ==> compression-pack-share-tiffsep1(Yellow).tif
201008060453PM ==> compression-g4-share-tiffsep1(Yellow).tif
201008060452PM ==> compression-lzw-share-tiffsep1(Yellow).tif
201008060451PM ==> compression-default-share-tiffsep1(Yellow).tif
201008060359PM ==> compression-none-share-tiffsep.Yellow.tif
201008060355PM ==> share-tiffsep.Yellow.tif
現在你幾乎準備用於比較第一場。
但考慮到這一點:我得到12小時的週期我的時間,與AM
和PM
。因此,爲了進行數值比較,我們必須將PM和AM分別替換爲數值,這樣我們的04:51 AM
和04:50 PM
的翻譯仍然會以正確的方式在數字上排序。
現在這個怎麼樣:
for /f "usebackq tokens=1-7* delims=/: " %I in (`dir/tc/o-d/s gstmp\*yell*.tif^
^| findstr 2010`) do (
if "%K%I%J %N %L%M" GEQ "20100806 PM 0457" (
echo. [ %K-%I-%J %L:%M %N %P. ]
)
)
此列出了應刪除所有文件,也呈現出各自的日期。到真的刪除,我們只需要用del/p/f/s %P
替換最後的echo. ... %P.
。
批處理文件將在Windows下執行,但需要在每臺Windows 2000或更高版本的計算機上運行,因此它不能使用最新Windows版本中的任何內容。我可以使用內置於Windows 2000或更高版本的任何內容,但正如我所說的,我不會使用VBScript等,除非直接批處理文件無法執行此操作。 – Anagoge 2010-08-13 21:56:44
Windows 2000的要求很遺憾地排除[Forfiles](http://technet.microsoft.com/en-us/library/cc753551%28WS.10%29.aspx),它將完全按照您的要求進行。 – Joey 2010-08-14 10:10:27