質問: 現在、過去の不要なファイルの削除を検討しています。 例えば、過去15日より前のファイルでかつ、ファイル名が`hoge.pdf`**ではないもの**を削除したいと考えています。 Windowsのbatファイルで対象の処理を行おうかと考えたのですが、FORFILESの後のコマンドで`if`の判定が上手くいかずに悩んでいます。 ### 前提 C:\temp配下にhoge.pdfとfuga.PNGファイルが存在するとします。 共に作成日は今日から15日以上前で、想定としては、fuga.PNGのみが削除されてほしいと考えています。 ### 実行結果 > > 何も指定しない場合 > > > ``` C:\TEMP\test>FORFILES /P "C:\TEMP\test" /S /M *.* /D -15 /C "cmd /c echo del @file" del "fuga.PNG" del "hoge.pdf" ``` > > `if @file=="hoge.pdf"`を指定した場合、何も抽出されず... > > > ``` C:\TEMP\test>FORFILES /P "C:\TEMP\test" /S /M *.* /D -15 /C "cmd /c if @file=="hoge.pdf" echo del @file" C:\TEMP\test>pause 続行するには何かキーを押してください . . . ``` > > `if not @file=="hoge.pdf"`と否定の条件を指定した場合、全て抽出されるのでif自体は有効と思われます > > > ``` C:\TEMP\test>FORFILES /P "C:\TEMP\test" /S /M *.* /D -15 /C "cmd /c if not @file=="hoge.pdf" echo del @file" del "fuga.PNG" del "hoge.pdf" C:\TEMP\test>pause 続行するには何かキーを押してください . . . ``` 要するに`@file=="hoge.pdf"`の判定が上手くいっていないと思うのですが、 回避する手立てや上記の目的を簡単に達成できる手段(FORFILESに限らず)をご存知の方がいたらご教示頂けないでしょうか。 VBなどで組んでも良いのですが、簡単に済めばそれに越したことはない、という思いです 宜しくお願い致します。
回答: `"`を生で書いちゃうとサブシェルに渡らないので、 ``` FORFILES /P "C:\TEMP\test" /S /M *.* /D -15 /C "cmd /c if @file==0x22hoge.pdf0x22 echo del @path" ``` では? また、`/S`を付けてサブディレクトリ内も対象にするなら、最後の`del`の所は`@path`でないと。