質問: INフォルダにあるファイル名の一部をB、Cフォルダで検索し、Bフォルダになければ INフォルダにあるファイルを削除するバッチファイルの記述方法について教えてください。 例> INフォルダ C:\Users\Desktop\IN | |------9012_test.txt | |------1234_abcd.xls Bフォルダ C:\Users\Desktop\1234| | |------DEFフォルダ------abcd.xls Cフォルダ C:\Users\Desktop\9012 | |------GHIフォルダ | |------SAMPLEフォルダ------TESTフォルダ 上記の場合、1234_abcd.xlsはBフォルダ(1234)フォルダ配下に存在しているので INフォルダから削除しない、9012_test.txtはCフォルダ(9012)フォルダ配下に存在していないので INフォルダから削除する。 1.INフォルダのファイル名の先頭には必ずC:\Users\Desktop\〇〇〇〇\の所属ディレクトリ名(数字)が 付与され、INの直下に配置されている 2.INフォルダにあるファイル名はB、Cフォルダのサブディレクトリのどこかに存在するかもしれない 以下記述を試しましたが、これではサブフォルダの検索まではしてくれません。 cd C:\Users\Desktop\IN for /F "tokens=1* delims=_" %A in ('dir /B *_*.*') do if not exist C:\Users\Desktop\%A\%B ( del "%A_%B" ) 何か良い記述がございましたらお知恵をお貸しください。 よろしくお願い致します。
回答: バッチファイルにします。 `dir /s`でサブフォルダーも含めてファイルの存在を調べます。 ``` cd C:\Users\Desktop\IN for /F "tokens=1* delims=_" %%A in ('dir /B *_*.*') do ( pushd C:\Users\Desktop\%%A dir /s %%B >NUL 2>NUL if errorlevel 1 ( del "C:\Users\Desktop\In\%%A_%%B" ) popd ) ```