0

作成したスクリプトに問題があります。

@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.........................を使用しています。 ........ do del"%%F"。親フォルダがFOLDER1/LOGSであるため、このようなことをしようと思いました。

@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個のファイルを保持して残りを削除するのではなく、1個を除くすべてのファイルを削除します。

このようなスクリプトでターゲットにするすべてのフォルダーを配置し、このスクリプトを1回だけ実行する方法はありますか?:

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

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

ありがとう

4

1 に答える 1

2

2番目のコードベースが2番目のフォルダーに1つのファイルのみを保持する方法がわかりません-2番目のフォルダーは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 を追加したので、すべてが良さそうに見えたら、ECHO を削除して機能させます。

于 2012-04-25T21:30:32.993 に答える