プロが教える店舗&オフィスのセキュリティ対策術

バッチファイルをスタートアップに入れています。
手軽で便利なのですが、起動するたびに出てしまうので、if文か何かを使って、前回の実行してから12時間経っていない場合はバッチファイルを終了させるようにできないでしょうか。
robocopyを使ったバッチで、オプションでログを作成するようにしています。そのテキストファイルの作成時間で12時間経っているかどうか判断できればと思っています。

と質問したところ、以下の回答を得ました。

check.vbs
-------------------------
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("logfile.txt")
WScript.Quit(DateDiff("h",f.DateCreated,Now)>12)
-------------------------

バッチでは、先頭で、
cscript check.vbs || exit

これを追加したのですが、12時間経っていなくても実行されます。
なぜなのでしょうか。

A 回答 (2件)

> 他の方法ではなく、質問内容がなぜ正常に実行されないかを教えていただけないでしょうか。



スクリプトの比較計算式がまちがっていて、
f.DateCreated と Now の位置が逆なので、日付の比較計算結果が常にマイナスになってしまうからでしょう。

下記のスクリプトを test.vbs として作成して表示結果を確認してみてください。
常にf.DateCreated < now のはずです。

Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.GetFile("logfile.txt")
wscript.echo f.DateCreated
wscript.echo now

---
f.DateCreated と Now を入れ替えても正しい処理は行なわれません。
理由は DateCreated はファイルの当初の作成日付ですので、
robocopyのログの最終行に書き込まれている日付ではありません。
すでにNo.1で書きましたが「robocopyのログファイルの最終行に書き込まれている日付」を使う必要があります。

この回答への補足

度々ありがとうございます。
複数台にバッチファイルを導入したいので、Windows7標準搭載のコマンドのみを使用したいです。

DateLastModifiedを使ってもできないでしょうか。

補足日時:2012/01/30 21:01
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/03/31 15:59

> そのテキストファイルの作成時間で12時間経っているかどうか判断できればと思っています。



その時間ではなくて「前回、robocopy処理が終了した日付・時刻」を使うのが適切ではありませんか?

いろいろなやり方がありますので、一概には言えませんが、
私なら、前回の robocopy の終了日付・時刻と、バッチ実行時刻(現在時刻)を比較します。
robocopy の日付・時刻はログファイルの最終行に記録してありますので、
tail コマンドを使用して
tail -1 robocopy.log
のように ログファイルの最終行の文字列を取得します。
取得した文字列から判定に使用する「日付・時刻」は別途プログラムで切り出して、現在の日付・時刻と比較します。

tail コマンドは下記サイトのマイクロソフトの rktools.exe をダウンロードしてインストールすれば、Win7 で使用できます。
---Windows Server 2003 Resource Kit Tools
http://www.microsoft.com/download/en/details.asp …

この回答への補足

ご回答ありがとうございます。
他の方法ではなく、質問内容がなぜ正常に実行されないかを教えていただけないでしょうか。

補足日時:2012/01/29 19:26
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/03/31 16:00

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