1

おそらく誰かが助けになるでしょう。次の命名規則を持つファイルがいくつかあります。

fooR1.txt, fooR2.txt, fooR3.txt, . . . , fooR1000.txt  

R500 を超えるすべてのファイルを削除したいと考えています。複数のフォルダーがあり、各フォルダーを通過する方法はわかっていますが、レプリケーション 501 以降でファイルをキャプチャして削除する方法がわかりません。どうすればそんなことができますか?

4

4 に答える 4

1

簡単にどうですか:

ren foo500.txt foo499bis.txt
del fooR5??.txt fooR6??.txt fooR7??.txt fooR8??.txt fooR9??.txt fooR10??.txt 
ren foo499bis.txt foo500.txt

エレガントではありませんが、効率的です。

于 2012-09-04T22:38:15.440 に答える
1

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
于 2012-09-05T00:26:56.193 に答える
0

あなたの範囲は開いているので、基準を逆にしました。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
于 2012-09-05T13:35:25.300 に答える
-1

これにはバッチ スクリプトを作成する必要があります。次に、バッチファイルに書き込むことができます。

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 回繰り返す必要があります。

于 2012-09-04T22:47:06.900 に答える