おそらく誰かが助けになるでしょう。次の命名規則を持つファイルがいくつかあります。
fooR1.txt, fooR2.txt, fooR3.txt, . . . , fooR1000.txt
R500 を超えるすべてのファイルを削除したいと考えています。複数のフォルダーがあり、各フォルダーを通過する方法はわかっていますが、レプリケーション 501 以降でファイルをキャプチャして削除する方法がわかりません。どうすればそんなことができますか?
おそらく誰かが助けになるでしょう。次の命名規則を持つファイルがいくつかあります。
fooR1.txt, fooR2.txt, fooR3.txt, . . . , fooR1000.txt
R500 を超えるすべてのファイルを削除したいと考えています。複数のフォルダーがあり、各フォルダーを通過する方法はわかっていますが、レプリケーション 501 以降でファイルをキャプチャして削除する方法がわかりません。どうすればそんなことができますか?
簡単にどうですか:
ren foo500.txt foo499bis.txt
del fooR5??.txt fooR6??.txt fooR7??.txt fooR8??.txt fooR9??.txt fooR10??.txt
ren foo499bis.txt foo500.txt
エレガントではありませんが、効率的です。
fooR###.txt
これにより、### が 500 より大きいすべてのファイルが削除されます。
@echo off
setlocal EnableDelayedExpansion
for %%f in (fooR*.txt) do (
set num=%%~f
set num=!num:~4,-4!
if !num! gtr 500 del /q "%%~f"
)
endlocal
あなたの範囲は開いているので、基準を逆にしました。1 ~ 499 の範囲にないものはすべて削除してください。これはあなたのものと完全に同等ではないことに注意してください。たとえば、fooR001.txt
またはという名前のファイルも削除しますfooR_something_else.txt
。
@echo off
for %%F in (fooR*.txt) do (
echo %%F | findstr /v /r "fooR[1-9]\.txt fooR[1-9][0-9]\.txt fooR[1-4][0-9][0-9]\.txt" >nul && echo del %%F
)
最初の行 ( for
) は で始まるファイルを列挙しfooR
、次に各ファイルについてパターンに一致しないfindstr
かどうかをチェックし(オプション)、最後にチェック (つまり、一致しない) が正の場合にコマンドが実行されます (前のコマンドが成功した場合にのみ実行することを意味します) 。 .
上記のコードは、コマンドを実行するのではなく、エコーするだけなので、安全に実行して、実際に正常に動作することを確認できます。実際に削除を実行するには、その前に削除するだけです。/v
&&
echo
注:実際には、コマンドラインから次の形式で直接実行できます。
@for %F in (fooR*.txt) do @echo %%F | findstr /v /r "fooR[1-9]\.txt fooR[1-9][0-9]\.txt fooR[1-4][0-9][0-9]\.txt" >nul && echo del %F
これにはバッチ スクリプトを作成する必要があります。次に、バッチファイルに書き込むことができます。
DEL "fooR500.txt"
末尾が .txt のすべてのファイルを削除するには、次のように記述します。
DEL "*.txt"
私が知っているのはそれだけですが、500 以上のファイルを取得したい場合は、次を使用して値 500 を保持する変数を Batch で作成する必要があります。
set Value = 500
次に、ファイル「fooR」+ Index +「.txt」を削除するようにします。これを行うには、次のようにする必要があります。
set "FilePre = fooR"
set "FileW = %FilePre% %Value%"
set "Ex = .txt"
set "FileX = %FileW% %Ex%"
del FileX
次に、Value を 1 つ上げて、1000 に達するまでこのプロセスを 500 回繰り返す必要があります。