• 締切済み

DOSのRimdirが上手く作動しません。

OS 2000のパソコンで夜間バッチでデータのバックアップをさせています。 バッチの内容はH:\3日前のフォルダ毎全て削除して、 Rmdir H:\3日前 /S /Q H:\2日前のフォルダを3日前と言う名前にリネーム Ren H:\2日前 3日前 させています。 このバッチファイルが最近よく止まってしまいます。 以前にあったのは、Hドライブが認識できなかったのでRmdirの前にexistを使ってドライブの確認をして認識できたらRmdirを実行し、出来なかったらエラーをLogに吐出すようにしています。今回はこのエラーを出していないので違う原因のようです。 Rmdirには/Sと/Qのスイッチを付けていますが、更にRmdirの前にattrib -r -h -s を書いて属性の解除も行っています。 このバッチはタスクスケジューラーを使って実行させているのですが、タスクの状況を見ると実行中となっている事から、エラーになっているのではなくて削除しようとしているが、削除できずにその行で止まっているようです。 不思議なのは、この記述で実行できている日があるのです。大体1週間位ご機嫌に動いていて、突然止まってしまいます。 今回のケースは再起動すると上手く実行しました。 この問題を回避する方法はありませんか?

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

>DOSの記述についてはWindowsのヘルプを頼りに、記入例や注意を参考に作成しているのですが、 >Rimdirの標準出力や標準エラー出力のログ出力はどのようにすればいいのでしょうか?ヘルプには載っていないように思います。 標準出力のリダイレクトはされてますよね、 echo ほげほげ>log.txt とか。 これってechoコマンドが標準出力に出力した内容をファイルにリダイレクトしてるってことですよね。 で、#3の方がかかれた cmd /c \path\batch.bat >\logpath\log.txt 2>&1 が、batファイルの実行したときに出力される標準出力と標準エラー出力を\logpath\log.txtに書き出すということになります。 http://hp.vector.co.jp/authors/VA000092/nt/console.html

参考URL:
http://hp.vector.co.jp/authors/VA000092/nt/console.html
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

>/dはどのような効果があるのでしょうか? Win2000ProSP4のATTRIB /? には、 /D フォルダも処理します。 と書いてあります。 >止まった状態で、どの様な点を確認すればいいのでしょうか? +R や +S 属性のファイル・フォルダが無いかとか、手動で消せるかとか。 あと、#1の方もお書きですが、タスクスケジューラーに cmd /c \path\batch.bat >\logpath\log.txt 2>&1 と登録してエラーメッセージを見てみる。rmdirの前後に、echo %time%をつけてrmdirの実行時間を見てみるとか。 >止まった状態で見た所、接続は繋がったままでしたので 途中で一時的にタイムアウトが出たのかもしれません。

ruru0707
質問者

補足

ヘルプを見ていたマシンはNTなのでNTには/dがなかったので載っていなかったのですね。実行させているマシンは2000なので/dも早速追加します。 エラーメッセージを出力するとありますが、記載していただいた内容をリダイレクトするとどのような内容がログに出力されるのですか? 今は下記のような記述でエラーを拾っているつもりなんですが・・・ Rmdir H:\3日前 /S /Q IF ERRORLEVEL 0 goto :next ECHO 3日前フォルダの削除に失敗しました。 >>\logpath\log.txt goto :EXIT :next Ren H:\2日前 3日前 この方法ではエラーを出力していません。というより、Rmdir自体が終了していないようなのです。 教えていただいた記述方法に変更する事によって今の記述の方法で拾えなかったエラーや状況が確認できるようになるのでしょうか?

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.2

>更にRmdirの前にattrib -r -h -s を書いて属性の解除も行っています。 attrib には /s /d も付けていますか? H:はネットワークドライブなんでしょうか?そうするとif existでのチェックのときやrmdirし始める時点ではネットワークが繋がっていたが、削除中に一時的に切れたとかでしょうか(ファイルが多いと削除にも時間がかかるので)。 止まった状態で、H:\3日前 の中を見ると様子が分かると思うんですが、いかがでしょう。 あと、再現性があるなら、しばらくは手動実行で状況を見るとか。

ruru0707
質問者

補足

早速の回答有り難うございます。 attribの/sはサブフォルダも含めてすべてという意味ですね。付けていませんでしたので早速追加するようにします。/dはどのような効果があるのでしょうか?DOSのコマンドについてはWindowsのヘルプを見て作成しているのですが、attribを調べてみましたが載っていませんでした。 H:はご指摘の通り、ネットワークドライブです。しかし、止まった状態で見た所、接続は繋がったままでしたのでやはりこれが原因ではなさそうです。H:\3日前 の中を見ても特におかしいと思われる事には気付きませんでした。止まった状態で、どの様な点を確認すればいいのでしょうか?

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

>出来なかったらエラーをLogに吐出すようにしています。今回はこのエラーを出していないので違う原因のようです。 rmdirの標準出力や標準エラー出力の内容をちゃんとログに出力して障害の状況を確認しましょう。

ruru0707
質問者

補足

早速の回答有り難うございます。 DOSの記述についてはWindowsのヘルプを頼りに、記入例や注意を参考に作成しているのですが、Rimdirの標準出力や標準エラー出力のログ出力はどのようにすればいいのでしょうか?ヘルプには載っていないように思います。 existのエラーはIfで該当しなかったら、自分でこのメッセージを出すと決めた内容をリダイレクトを使ってtxtに出力する方法を取っています。 参考のURLとかでも結構ですので教えていただけたらと思います。