あるディレクトリ以下から拡張子が mp3 以外のファイルを全て消したい (mp3 だけ残したい) というとき、どのようなコマンドを使えばよいかを紹介している記事を読んだ。
この記事においては、 Windows のコマンドプロンプトでやるにはバッチファイルを作らない限り無理ではないかとしている。 ワンライナーでは難しいという意味だろう。
ファイルを条件 (ここではファイル名) で選別して消したいというのはいかにも状況としてありそうではあるし、パズル的な面白さもありそうだったので考えてみた結果、以下のような組合せが生まれた。
dir /a-d /b /s | for /f "usebackq delims=" %x in (`findstr /ELV .mp3`) do del "%x"
ちなみにこれをバッチファイルにするときは %x ではなく %%x とする必要があることに注意されたい。 (どうしてこのような仕様になっているのかよくわからない)
私はコマンドの説明を読みながら注意深く組合わせたが、この手のワンライナーはその場で組合わせがさっと出てこないと意味がない。 いきなり書いて期待通りに動作させるにはだいぶん習熟が必要そうだ。
Document ID: 640cd1a8908a0451860d9d2a66bfb23d