2012-04-25 104 views
0

在多個文件我有我寫的劇本有問題:批處理文件刪除多個文件夾中保存最近的X文件的每個文件夾

@echo off 
e: 
cd folder1 
cd logs 
cd App1 

for /F "skip=20 delims=" %%F in ('dir /b/o-d/a-d log11101*.*') do del "%%F" 

該腳本可以很好地用於1個文件夾。它保留20個最新的日誌文件,並刪除文件夾中以「log11101」開頭的所有其餘文件(因爲我不想使用此腳本刪除這些文件夾中的其他日誌文件... 我想在多個文件夾中應用此腳本,但這些腳本都在FOLDER1中,使用相同的「for/f」skip = 20 ......................... .........做德爾「%% F」 我因子評分做這樣的事情,因爲父文件夾的是FOLDER1 /日誌:

@echo off 
e: 
cd folder1 
cd logs 
cd App1 

for /F "skip=20 delims=" %%F in ('dir /b/o-d/a-d log11101*.*') do del "%%F" 

cd .. 
cd App2 

for /F "skip=20 delims=" %%F in ('dir /b/o-d/a-d log11101*.*') do del "%%F" 

但它不工作,它的工作原理! 1個文件夾,但另一方面,它會刪除所有,但1個文件,而不是保持20個文件,並刪除其餘部分。

會不會有一種方法對於我來說,我想把所有的文件夾與腳本,像這樣的東西,只運行這個腳本一次? :

x:/folder1/logs/app1 
x:/folder1/logs/app2 
x:/folder1/logs/app4 

for /f "skip=20............... 

感謝

回答

2

我怎麼沒看到你的第二個代碼庫只保留1個文件中的第二個文件夾 - 第二個文件夾應該相同的行爲,以1號。你確定App2文件夾有一個以上的log11101 *文件嗎?

建議 - 在您的DEL命令之前插入ECHO並查看結果。一旦輸出看起來正確,然後刪​​除ECHO以使腳本正常工作。

它需要很少的代碼就駐留在你的根文件夾列表上方便地執行你的刪除操作:

@echo off 
for %%D in ("App1" "App2" "App4") do (
    cd /d "e:\folder1\logs\%%~D" 
    for /f "skip=20 delims=" %%F in ('dir /b /o-d /a-d log11101*.*') do echo del "%%F" 
) 

如果要執行你的根目錄下的所有文件夾的刪除:

@echo off 
for /d %%D in ("e:\folder1\logs\*") do (
    cd /d "%%D" 
    for /f "skip=20 delims=" %%F in ('dir /b /o-d /a-d log11101*.*') do echo del "%%F" 
) 

我DEL之前添加回聲,所以一旦一切都看起來不錯,除去ECHO使其功能。

相關問題