2013-02-05 20 views
0

日誌文件,我有一個包含日誌文件混合的文件夾 - 例如:需要清理基於文件名和日期

AAA.0.1.txt
AAA.0.2.txt
BBB.1.2.txt
BBB.1.3.txt
BBB.1.4.txt
CCC.0.5.txt
CCC.0.6.txt

我需要一個小巧的批處理文件來清理掉所有,但最近的(按日期)A,B和C各3個文件。

我可以在文件夾中刪除所有,但他最近的3個文件:

for /f "tokens=* skip=3" %%F in ('dir %myDir% /o-d /tc /b') do del %myDir%\%%F 

,但我不知道如何在命名約定添加沒有硬編碼A,B,C和做3單獨的循環(如果D出現,那麼它會被忽略)。

任何想法?

好吧,我想通了:

@echo off 
setlocal enabledelayedexpansion 
cls 
set fileDir=C:\My\Log\Path 
set prev=A 
for /f "tokens=*" %%P in ('dir %fileDir% /o-d /tc /b') do (
    set fileName=%%P 
    for /f "tokens=1,2,3,4 delims=. " %%a in ("!fileName!") do set proj=%%a 

    if "!proj!" == "!prev!" (
     REM skip 
    ) else (
     for /f "tokens=* skip=3" %%F in ('dir %fileDir%\!proj!.* /o-d /tc /b') do del %fileDir%\%%F 
     set prev=!proj! 
    ) 
) 

回答

0

我相信你想要的最後修改日期,所以我改變了選項/T2。如果您真的想要創建日期,請更改回/TC

for /f "delims=." %%A in ('dir /a-d /b "%myDir%\*.*.txt"') do (
    for /f "skip=3 delims=" %%F in (
    'dir /a-d /o-d /tw /b "%myDir%\%%A.*.txt' 
) do del "%myDir%\%%F" 
) 

上述可能有點低效,因爲它會試圖爲每個文件刪除一次舊文件。你真的只需要刪除舊的文件一次每個唯一的名稱前綴 - 可以實現,但我認爲增加的複雜性是不值得的。上述工作很好。

+0

謝謝,我已經知道了。它不會讓我回答我自己的問題,所以我只是編輯了原文。 – Asmoran