コマンドから例外を除いてすべて削除

コマンドから例外を除いてすべて削除

約 50 個の異なるファイル (NAME1.jpg、NAME2.jpg、NAME3.jpg...) が入ったフォルダーがあります。

実行するプログラムがあり、各ファイルを約 4 つの異なるファイルに分割し、名前を変更します (NAME1-0.jpg、NAME1-1.jpg、NAME2-0.jpg、NAME2-1.jpg...)

*-0.jpg ファイル以外のすべてのファイルを実行して削除する .bat ファイルを作成したいと思います。

これまでのところ、私が最も近づいたのは次の行です。

for %i in (*) do if not %i == "*.jpg" del "%i"

しかし、これは保存したい -0.jpg を含むフォルダー内のすべてのファイルを削除します。

もっと良いラインはありますか?

答え1

*-0.jpg ファイル以外のファイルをすべて削除したい。

実行するプログラムがあり、各ファイルを約 4 つの異なるファイルに分割し、名前を変更します (NAME1-0.jpg、NAME1-1.jpg、NAME2-0.jpg、NAME2-1.jpg...)

次のバッチ ファイル (test.cmd) を使用します。

@echo off
setlocal enabledelayedexpansion
for /f "tokens=*" %%i in ('dir /b NAME?-?.jpg') do (
  rem get file name
  set _fname=%%~ni
  rem get last 2 characters of file name
  set _last2=!_fname:~-2!
  if [!_last2!] NEQ [-0] del "%%i"
  )

例:

F:\test>dir *.jpg
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

08/12/2015  23:51                 0 NAME1-0.jpg
08/12/2015  23:51                 0 NAME1-1.jpg
08/12/2015  23:51                 0 NAME2-0.jpg
08/12/2015  23:51                 0 NAME2-1.jpg
               4 File(s)              0 bytes
               0 Dir(s)  1,776,919,613,440 bytes free

F:\test>test
F:\test>dir *.jpg
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

08/12/2015  23:51                 0 NAME1-0.jpg
08/12/2015  23:51                 0 NAME2-0.jpg
               2 File(s)              0 bytes
               0 Dir(s)  1,776,919,613,440 bytes free

参考文献

  • Windows CMD コマンドラインの AZ インデックス- Windows コマンド ラインに関連するあらゆることに関する優れたリファレンス。
  • ディレクトリ- ファイルとサブフォルダーのリストを表示します。
  • 有効遅延拡張- 遅延展開では、変数は解析時ではなく実行時に展開されます。
  • /fの場合- 別のコマンドの結果に対してコマンドをループします。
  • もし- 条件付きでコマンドを実行します。
  • セット- CMD 環境変数を表示、設定、または削除します。SET で行われた変更は、現在の CMD セッションの期間中のみ保持されます。

関連情報