• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:バッチファイル 時間指定)

バッチファイル 時間指定

このQ&Aのポイント
  • バッチファイルをスタートアップに設定していますが、起動するたびに出てしまいます。前回の実行から12時間経っていない場合はバッチファイルを終了させる方法を知りたいです。
  • robocopyを使ったバッチファイルで、ログファイルの作成時間を利用して12時間経過しているかどうかを判断したいです。
  • バッチファイルに「cscript check.vbs || exit」を追加し、12時間経過していない場合は終了させたいのですが、なぜ実行されてしまうのでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.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のログファイルの最終行に書き込まれている日付」を使う必要があります。

mamoru1220
質問者

お礼

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

mamoru1220
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • 8ive22ty
  • ベストアンサー率52% (770/1479)
回答No.1

> そのテキストファイルの作成時間で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.aspx?DisplayLang=en&id=17657

mamoru1220
質問者

お礼

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

mamoru1220
質問者

補足

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

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • バッチファイル 時間指定

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

  • ファイル結合について

    .vbsを使用して複数のテキストファイルを1つのテキストファイルに結合したいと思っております。 条件として対象ファイルが0KB及びない場合には追記しない。 結合部分に関しては下記で追記することができたのですが 条件部分に関してはFilelen?を使用するとファイルサイズを取得できるみたいなのですが 実際の記述がわかりませんでした。 ご教授頂けると助かります。 ■追記部分 Set logFile = fso.GetFile(logFile) Set f = logFile.OpenAsTextStream(8, -2) Set objFS = CreateObject("Scripting.FileSystemObject") Set objText = objFS.OpenTextFile(srcFile) myText = objText.ReadAll 'ExecDateTime = Now f.Write(myText & vbNewLine) f.close '解放 Set f = Nothing Set logFile = Nothing Set fso = Nothing

  • Win2K8 R2のタスクでバッチが動作しない

    Windows2008 R2のタスクスケジューラでバッチファイルが実行できない状態に陥っています。 環境・状況等は以下のとおりです。 ・バッチファイルを単体で実行させたときには、問題なく実行できる。 ・ネットワーク上のサーバのあるフォルダをrobocopyするジョブ。 ・タスクスケジューラから実行できている他のバッチファイルを流用して作成。(このジョブも別のサーバのバックアップをしている) ・実行結果は、0x1。 ・タスクスケジューラ登録時には、administratorで登録し、パスワードも入れている。 問題のバッチファイルを直接叩いたときには、何のエラーもなく、約3時間要するrobocopyでのバックアップが稼動しますが、 タスクスケジューラに登録して実行しようとすると、タスクスケジューラの履歴をみると、スタートはしているがすぐに終了して おり、バッチファイル内に記述したrobocopyが稼動していないようです。 バッチファイルの内容は ----------------------- @echo off set LOGFILE=c:\bat\fd_backup\backup.log date /t>%LOGFILE% echo 開始時刻>>%LOGFILE% time /t>>%LOGFILE% echo. >>%LOGFILE% echo Run backup.bat>>%LOGFILE% echo. >>%LOGFILE% ROBOCOPY \\server1\backup\ D:\BACKUP\server1-back\ /MIR /NP /FP /TS /COPYALL /TEE /R:0 /LOG+:%LOGFILE% echo. >>%LOGFILE% echo 終了時刻>>%LOGFILE% time /t>>%LOGFILE% ------------------------- もうひとつ登録してあるバッチファイルは、robocopyの全く同じコマンドで、対象としているサーバと保存先やログファイル名が 異なるだけで問題なくタスクとして稼動しています。 ネット上でいろいろと調べてチェックしてみましたが、おかしいところが見当たらず、困っています。 アドバイスよろしくお願い致します。

  • バッチファイルの文字列をVBSに渡すには

    バッチファイルからVBSを実行しています。 echo msgbox "123" >> %TEMP%\abc.vbs cscript //NoLogo %TEMP%\abc.vbs >%TEMP%\abc.cmd del %TEMP%\abc.vbs call %TEMP%\abc.cmd del %TEMP%\abc.cmd このバッチを実行すると 123 が表示されます。 "123" の部分を変数として引渡したいのです。 set a=123 echo msgbox &a& >> %TEMP%\abc.vbs このようにして実行すると ’コマンドの構文が誤っています。’ となります。 よろしくお願いします。

  • このバッチは間違いないでしょうか?

    システムの運用をしていますが、タスクでバッチを定期的に起動して、ツールを自動運用するようにしたいのですが、以下のようなバッチを作りました。 =========================== D: CD D:\aaa\bbb\ccc dataBackup.wsf cscript ”data 退避.vbs” =========================== このバッチについて質問ですが、 ・「cscript」というのは、どこかのサイトに書いてあってのを参照してコピーして書いてみたら動いたので書かないといけないのだなぁ という位の認識なのですが、vbsファイルを起動するときは、「cscript」と記述する必要がある、というのは間違いないでしょうか? ・テストしたサーバではたまたま動きましたが、cscriptは、何かアプリやコンポーネントが入っていないと動かないのでしょうか?つまり、買ったばかりのパソコンで、cscript ”data 退避.vbs”で動かすためには何かアプリ等を入れる必要があるのでしょうか? ・「cscript ”data 退避.vbs”」が「cscript data 退避.vbs」だと、 ファイル名にスペースが入っていてうまく動かなかったため、 cscript data 退避.vbs を””等で起動するファイルを指定して cscript ”data 退避.vbs” としたのですが、問題ないでしょうか? 調べればすむ話なのですが、急いでいるため質問することにしました。初心者的な質問恐縮ですが、よろしくお願いいたします。

  • MS-DOSバッチファイルで

    以下のようなMS-DOSバッチファイルで同じ処理の繰り返しを行う場合、for文を使って書くにはどのようにしたらよいでしょうか? 下記はvistaバージョンですがwindowsでも大丈夫です。ご教授宜しくお願い致します。 robocopy %CP_FROM_DIR1% %CP_TO_DIR%%DIR_a% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR2% %CP_TO_DIR%%DIR_b% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR3% %CP_TO_DIR%%DIR_c% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR4% %CP_TO_DIR%%DIR_d% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR5% %CP_TO_DIR%%DIR_e% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR6% %CP_TO_DIR%%DIR_f% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR7% %CP_TO_DIR%%DIR_g% /E /R:2 /W:1 >> %LOGFILE% robocopy %CP_FROM_DIR8% %CP_TO_DIR%%DIR_h% /E /R:2 /W:1 >> %LOGFILE%

  • バッチファイルのコマンド

    なんかバッチファイルで ROBOCOPY D:\RAMImage F:\icache\cache /e こんな感じ↑のバッチファイルを実行するとF:\icache\cacheフォルダの中にもうひとつのcacheフォルダとそれ以下のファイルができてしまうのですがなぜですか? OSはVistaです。 よろしくおねがいします。

  • [vbScript]ファイルの日付

    任意のファイルの作成日付を取得するまでは下記の記述でできたのですが、「YYYY/MM/DD hh:mm:ss」で取得します。 --------------------------- Set fso = CreateObject("Scripting.FileSystemObject") Set src = fso.Getfile(ckFile) WScript.Echo src.DateCreated --------------------------- YYYYMMDD形式で取得したい場合は、どうすればよいでしょうか?

  • テキストファイルに一行文字を追加したい

    バッチ処理でテキストファイルの最後に文字列を追加する作業をやりたいのです。 普通の文字列ですと、1)のようにして上手くいきます。 ところが「"」の入った文字列を一行加えようと2)のようにすると、エラーになってしまいます。どうしたら前に進めるでしょうか? --------- 1)上手くいくケース ----------- Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.GetFile("C:\test\hoge.txt") Set f = tmpFile.OpenAsTextStream(8, -2) f.Write("一行追加しました") f.close Set f = Nothing Set tmpFile = Nothing Set fso = Nothing --------- 2)上手くいかないケース ----------- Set fso = CreateObject("Scripting.FileSystemObject") Set tmpFile = fso.GetFile("C:\test\hoge.txt") Set f = tmpFile.OpenAsTextStream(8, -2) f.Write("一行"追加"しました") f.close Set f = Nothing Set tmpFile = Nothing Set fso = Nothing

  • VBScript(WScript)のバッチファイル実行

    お世話になります。 VBScriptで困っています。 ご存知の方、ご教示願えますでしょうか。 Windowsでバッチファイルを実行したときに、DOS画面(コマンドプロンプト)が一瞬パッて表示されるかと思います。 現在開発中のシステムで、プログラムからバッチファイルを自動で実行する処理を入れております。 通常ならばバッチファイルを実行した場合、DOS画面が表示されてしまいますが DOS画面を出さないようにプログラムを組んでいます。 つまり、VBScriptからバッチファイルを実行しております。 以下、VBScriptのソースを記載します。 Set objShell = WScript.CreateObject("WScript.Shell") fcresult = objShell.Run("C:\abc.bat", 0, True) wscript.quit fcresult 上記のVBSを実行すると、必然的に「abc.bat」が実行されます。 しかし、現在僕が使っている環境ですとDOS画面が表示されません(←これがやりたいこと) しかし、お客さんの環境で同じ様にVBSからバッチファイルを実行すると 「C:\WINDOWS\System32\CScript.exe」という名前でDOS画面が起動されてしまいます。 周りの環境でもVBSからバッチをたたくような処理を行ってみましたが、DOS画面が起動されず。。。 正直、再現が難しいため大変困っております。 お客さんの環境では100%再現されます。 全くもって原因がつかめておりません。 Windowsのセキュリティの設定でしょうか!? ご存知の方いらっしゃいましたら、知恵をお貸しください。 よろしくお願いいたします。