アプリ版:「スタンプのみでお礼する」機能のリリースについて

すみません、どなたか教えて下さい。
batファイルで一連の処理を実施しています。
(1)ファイル削除
(2)フォルダ削除
(3)コピー処理
これらの各処理が正常終了したかの確認をbatファイルの中で行いたいのですが、
方法がわかりません。
どれも「errorlevel」は返さないようです。

どなたかご存知の方アドバイスをお願い致します。

A 回答 (4件)

#2です。


Windowsになって拡張された for 文を使えば、ファイルサイズを取得したり、その数値を比較することもできるようです。

for %%I in (hoge.log) do @if %%~zI equ 0 echo foobar
↑例えばこんな感じで。

意味は
for /?
if /?
で調べてみてください。
    • good
    • 0
この回答へのお礼

ありがとうございました!!
意図する結果を取得することができました。

お礼日時:2008/12/09 09:46

(1)ファイル削除についてのみ意見を言いますと、


恐らく、(1)が正常終了したかを判別する方法はないと思います。
(私の調査が間違っている可能性もありますので、ご参考としてお聞きください。)

Win32APIを使用したファイル削除の処理を実装した時に調べたのですが
ファイルを排他的にロックして削除することは出来なかったと記憶しています。つまりあるプロセスがそのファイルを確実に削除することはできません。(ほかのプロセスが先行して削除する可能性を排除できない。DeleteFileの結果がNGだからといってファイルが削除されていないとは断言できない。細かい話を希望される場合はもう少し説明します。)

delコマンドも内部ではDeleteFileを使用していると思うので、同様の事がいえるのではないか、と推測します。

ですから(1)については、ファイルを削除したあとで、対象ファイルが存在するかを確認することで、処理結果の確認とするのがよいと思います。
    • good
    • 0
この回答へのお礼

hogejoさん、アドバイスありがとうございました。
より細かく正確な仕組みを作るとなるとより深い知識が必要だな、と強く感じました。
今後の課題としたいと思います。


今回は、logファイルを削除する仕組みですので、ファイルを取り合うこともないので、delのリダイレクトの結果を判定結果に使いたいと思います。

ありがとうございました。

お礼日時:2008/12/09 09:44

それなりにお詳しいようなので思いついた方針だけ書いておきます。



各コマンドでリダイレクトを使い実行結果をファイルに書き出し。
grep等を使ってエラーの文字列を検索。ヒットすれば正常終了でないと判断。
…こんな感じでどうですか?

OSが分かりませんが、NT系なら標準出力だけでなく、標準エラー出力もリダイレクトできるので、これでOKじゃないでしょうか。
>hogehoge.log とやると標準出力がリダイレクトされ、
2>hogehoge.log とやると標準エラー出力がリダイレクトされるようですよ。

というか、これなら標準出力と標準エラー出力でリダイレクト先が分けられるので、生成されたファイルサイズを見るだけで、エラーか正常終了か分かるような気もします。(←試してみてください)

この回答への補足

piro19820122さん、ありがとうございました。

リダイレクトで標準出力する方法ですね。
試しに標準エラー出力をやってみてうまくいきました。
ですが、ファイルサイズの取得方法(0か0じゃないか)で、また立ち止まってしまいました。
ファイルの中身を見ずにサイズだけ取得し確認する方法はありますでしょうか?

補足日時:2008/12/08 16:15
    • good
    • 0

delで削除するのが簡単ですが・・・(copyでコピーする)


連続、定期的処理のためですか?
カレントにパス(PATH) が通っていますか?

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/syspc/ …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています