• ベストアンサー

バッチでループさせた場合、処理に失敗するとループを抜けてしまい、困っています。

仕事でバッチ作成をしていますが、うまく動作しなくて困っています。 もしわかる方がいましたら、教えていただけると助かります。 <実現したいこと> いくつかのサーバに同じディレクトリがあり、そのディレクトリの下のファイルをサブフォルダを含めて削除したい。 ただし、そのフォルダの下には何が入っているかはそれぞれ異なる(何もない場合もあり) たとえば、F:\test1\というフォルダはすべてのサーバに共通してあるが、その下に1と0のフォルダがあったりなかったりし、ある場合はその直下をすべて削除したい(1もしくは0フォルダは削除しない) また、1もしくは0のフォルダが両方なかった場合は、メッセージを出力したい。 <ソース> ※ a.iniの中身 F:\test1 F:\test2 ・・・(削除対象フォルダの一覧) for /f %%i in (a.ini) do ( set f=0 (1)rem 0フォルダがある場合、その直下を削除 if exist %%i\0\nul (set f=1 && call :sub %%i\0) (2)rem 1フォルダがある場合、その直下を削除 if exist %%i\1\nul (set f=1 && call :sub %%i\1) (3)rem 両方のフォルダがない場合 if %f%==0 (call :notf %%i) ) goto end :notf echo 削除対象フォルダ(%1)なし goto :eof :sub rem ファイル削除 del /s /q %1\*.* rem フォルダ削除 for /f %%i in ('dir /ad /b %1') do rd /s /q %1\%%i goto :eof :end (終了処理) <問題> 以上の処理を実行すると、以下の問題が出ます。 1.(3)両方のフォルダがなかった場合も、notfの処理に行かない 2.(1)0フォルダの中にあるファイルの削除に失敗した場合、(2)の1フォルダに対する処理に行かず、ループを抜けてendに進んでしまう。 申し訳ございませんが、回答お願いします。

みんなが選んだベストアンサー

  • ベストアンサー
  • f272
  • ベストアンサー率46% (8467/18126)
回答No.1

>1.(3)両方のフォルダがなかった場合も、notfの処理に行かない これくらいのバッチファイルが書ける人であれば enabledelayedexpansion をキーワードにして調べると解決できるでしょう。 >2.(1)0フォルダの中にあるファイルの削除に失敗した場合、(2)の1フォルダに対する処理に行かず、ループを抜けてendに進んでしまう。 再現できませんでした。

yuzuho56
質問者

お礼

ありがとうございました。なんとか乗り切ることができました。また、よろしくお願いします。

関連するQ&A