MS-DOSでのエラーログ保存方法とバックアップの確認方法について

このQ&Aのポイント
  • MS-DOSでサーバーバックアップ用のバッチファイルを作成し、エラーログを保存する方法について知りたいです。
  • また、バッチファイルでバックアップを取ったファイル名と時間をログに残すことができましたが、エラーログを別に取りたいと考えています。
  • さらに、バックアップ中のファイル名がDOS画面に表示されなくなってしまったので、解決策を探しています。
回答を見る
  • ベストアンサー

MS-DOSでのエラーログ保存について

はじめまして、現在DOSでサーバーのデータバックアップ用のバッチファイルを作成し タスクマネージャーで動かそうとしています。 下記の内容でとりあえずは組んでいるのですが、エラーログを保存する方法を 色々調べましたけど見つかりませんでした。 @echo 開始日付、開始時刻表示 @echo %date% %time% >> d:\BackupLOG\サーバー名Copy.log @echo サーバー名のバックアップを開始 xcopy i:\\サーバー名\*.* f:\\保存先\ /EXCLUDE:D:\BackupBAT\un-mlist.txt /e /h /k /c /y /r >> d:\BackupLOG\サーバー名Copy.log @echo 終了日付、終了時刻表示 @echo %date% %time% >> d:\BackupLOG\サーバー名Copy.log 一応バックアップ自体は問題なく動き、バックアップを取ったファイル名と時間は ログに残す事ができましたがエラーが発生した際に備えてエラーログを別に取りたいと 考えています。 あと、上記の設定ではコピー中のファイル名がDOS画面で表示されなくなって しまいました。 どなたか、ご存知な方がいらっしゃいましたらご助力下さい。 よろしくお願いします。

noname#174316
noname#174316

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

  • ベストアンサー
  • x1va
  • ベストアンサー率26% (802/3006)
回答No.2

エラーログはこんな感じでどうでしょう。 -------------------------------------------------------- (略) xcopy i:\\サーバー名\*.* f:\\保存先\ /EXCLUDE:D:\BackupBAT\un-mlist.txt /e /h /k /c /y /r ||goto error (略) goto end :error @echo %date% %time% >> d:\BackupLOG\error.log @edho コピー中にエラーが起きました。>>d:\BackupLOG\error.log goto end :end -------------------------------------------------------- このやり方では時刻ぐらいしか記録できませんが、詳細な情報は全体ログを見ればいいと思います。

noname#174316
質問者

お礼

ご連絡をありがとうございます。 確かにこれですと通常のバックアップログとエラーログで分けられそうですね。 エラーログに時刻が表示されたらバックアップログから時刻で検索を行えば 分かりそうです。 通常のバックアップログは ||goto error >>d:\BackupLOG\サーバー名Copy.log このような形で表記すればよろしいのでしょうか?

その他の回答 (3)

  • x1va
  • ベストアンサー率26% (802/3006)
回答No.4

> 下記のどのあたりで全体ログを取っているのでしょうか? そのバッチではありません。落ち着いてNo.1をよく読み直してください。 backup.batからbackup_main.batを呼び出していますよね? その際に指定しているログファイルに記録されます。

noname#174316
質問者

お礼

大変失礼致しました。 確かに通常ログとエラーログでしっかり分かれていました。 これで別々にログを取り、エラーが出た場合には時間で検索をし 原因を探せそうです。 非常に助かりました。 本当にありがとうございました。

  • x1va
  • ベストアンサー率26% (802/3006)
回答No.3

> 通常のバックアップログは > ||goto error >>d:\BackupLOG\サーバー名Copy.log > このような形で表記すればよろしいのでしょうか? このやり方では記録できません。最初の回答の通りにしてください。

noname#174316
質問者

お礼

大変申し訳ありませんが、下記のどのあたりで全体ログを取っているのでしょうか? 勉強不足で申し訳ありません・・・ ------------------------------------------------------------ (略) xcopy i:\\サーバー名\*.* f:\\保存先\ /EXCLUDE:D:\BackupBAT\un-mlist.txt /e /h /k /c /y /r ||goto error (略) goto end :error @echo %date% %time% >> d:\BackupLOG\error.log @edho コピー中にエラーが起きました。>>d:\BackupLOG\error.log goto end :end

  • x1va
  • ベストアンサー率26% (802/3006)
回答No.1

質問に書いてあるバッチを仮にbackup_main.batとして、別のバッチ(仮にbackup.batとする)からbackup_main.batを呼び出せばいいのでは。 backup.batの内容はたったこれだけ。↓ backup_main.bat >d:\BackupLOG\サーバー名Copy.log これでbackup_main.bat実行中の表示が全部ログに残ります。また、このやり方ではbackup_main.bat内に記述されている「>d:\BackupLOG\サーバー名Copy.log」は不要になるので消してください。

noname#174316
質問者

お礼

早速のご連絡をありがとうございます。 この場合「実行中の表示が全部ログに残ります」となっていますが、 実行中のログとエラーのみのログで別に分ける事は無理でしょうか? 何度もお手数ですが、よろしくお願いします。

関連するQ&A

  • batファイルで、call使っても戻ってこない

    こんにちは 教えてほしいことがあります。 batファイルで他のbatファイルを実行するためにcallで呼び出すと、処理がまた戻ってくる事を知り、 以下のようにやってみたのですが、戻ってきている様子がありません。 どこが間違っているのか教えていただければと思います。 以下file-backup.bat echo 処理開始 >> %LOG% date /t >> %LOG% time /t >> %LOG% C:\****\Backup\FastCopy198\fastcopy.exe /cmd=force_copy /auto_close /open_window /error_stop=TRUE /log /from_date="-2D" "D:\file2" "/to=\\********\file2" @echo off call "Z:\file-backup2.bat" echo 処理終了 >> %LOG% ←---これ以下がログファイルに表示されない time /t >> %LOG% echo. >> %LOG% ログに「処理終了」が入ってきませんので、callで戻ってきていないと判断しました。 環境はwinserver2008です。 ご教授お願いします。

  • 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の全く同じコマンドで、対象としているサーバと保存先やログファイル名が 異なるだけで問題なくタスクとして稼動しています。 ネット上でいろいろと調べてチェックしてみましたが、おかしいところが見当たらず、困っています。 アドバイスよろしくお願い致します。

  • MS-DOSでの日付表示

    MS-DOSコマンドで、日付や時刻の%date% %time%ですと、 yyyy/mm/dd hh:mm:ssの表示になります。 バッチファイルを作成して、フォルダ名の頭に日付時刻をつけたいんですが、 yyyymmdd hhmmss の表示形式にする方法が分かりません。 よろしかったら教えて頂けませんでしょうか。

  • 複数の自作バッチプロラムの共有ログを採取する方法

    複数の自作バッチプロラムの共有ログを採取する方法 os:windows xp バッチプログラムの開始前後にログ出力をします。 普通にバッティングせずに動くと、後述のサンプル・ログ(1)のように綺麗にとれます。 しかし、 バッティングした際に正しく取れません。 dos batファイルでやったところ、掴んでいるときに後から行った方の出力がされません。  → サンプル・ログ(1) それならと、 vbsで同じ事を作ってみました。 すると、掴んでいるときに後から行った方がエラーでコケました。 ファイルの定義やオープンの時に「掴んでいたら無制限に待つ」とか「タイムアウトまで待つ」とか、そういう事はできるでしょうか? 複数のアプリから同じファイルにIOするには仕組みとして何かが足りないのでしょうか? 以上、よろしくお願いします。 ■サンプル・ログ (1) ===== FILE_TIME.log ===== 2010/03/05- 9:00:00.00,処理1,開始 2010/03/05- 9:00:00.00,処理2,開始 2010/03/05- 9:30:00.00,処理1,終了 2010/03/05- 9:40:00.00,処理2,終了 ===== FILE_TIME.log ===== (2) ===== FILE_TIME.log ===== 2010/03/05- 9:00:00.00,処理1,開始 2010/03/05- 9:30:00.00,処理1,終了 2010/03/05- 9:40:00.00,処理2,終了 ===== FILE_TIME.log ===== ■サンプル・バッチファイル ===== Shori1.bat ===== @echo off echo %date%-%time%,処理1,開始 >> FILE_TIME.log rem 処理1呼び出し echo %date%-%time%,処理1,終了 >> FILE_TIME.log ===== Shori1.bat ===== ===== Shori2.bat ===== @echo off echo %date%-%time%,処理2,開始 >> FILE_TIME.log rem 処理2呼び出し echo %date%-%time%,処理2,終了 >> FILE_TIME.log ===== Shori2.bat ===== ■サンプル・vbs ===== Shori1.vbs ===== Set ObjSFS = WScript.CreateObject("Scripting.FileSystemObject") Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理1,開始" ObjLogFile.Close rem 処理1呼び出し Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理1,終了" ObjLogFile.Close ===== Shori1.vbs ===== ===== Shori2.vbs ===== Set ObjSFS = WScript.CreateObject("Scripting.FileSystemObject") Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理2,開始" ObjLogFile.Close rem 処理2呼び出し Set ObjLogFile = ObjSFS.OpenTextFile("FILE_TIME.log", 8, True) ObjLogFile.WriteLine Now() & ",処理2,終了" ObjLogFile.Close ===== Shori2.vbs =====

  • バッチファイル 2つのログに出力 短縮版

    お世話になっております。 WindowsXP環境にて下記のバッチファイルがあります。 コード-------------------------------------------------------------------------------- rem === 変数設定 =============================================================== rem --- 時間変数 --- set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% rem --- フォルダ変数 --- set LOG_DIR1=D:\test rem --- ファイル変数 --- set LOG_FILE1=LOG.txt set LOG_FILE2=LOG_ALL.txt set LOG_FILENAME1=%LOG_DIR1%\%LOG_FILE1% set LOG_FILENAME2=%LOG_DIR1%\%LOG_FILE2% set BAT_FILE1=test.bat rem コマンド拡張機能有効化 setlocal ENABLEEXTENSIONS rem === 変数設定 =============================================================== REM <開始処理>=============== call :TIME echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% rem 現在の日付/時間を取得 :TIME set yyyy=%date:~-10,2% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set HH=%TIME:~0,2% set MM2=%TIME:~3,2% set SS=%TIME:~6,2% exit /b コード-------------------------------------------------------------------------------- 上記プログラムは日付を2つのログに出力していますが、 echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME1% echo. >> %LOG_FILENAME1% echo %BAT_FILE1% 処理日 = %yyyy%%yy%/%mm%/%dd% 処理開始時間= %HH%:%MM2%:%SS%>> %LOG_FILENAME2% echo. >> %LOG_FILENAME2% と二重になっている無駄なコードとなり、見栄えが良くないです。 これを1つのコードで2つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • ログファイルの内容を取得したい

    Widnwosサーバ上で稼動しているアプリケーションから出力されるログがあります。 このログを毎日チェックしたいと思っているのですが、サーバが複数台あり、それぞれにログインして確認するのは面倒なため、ログファイルの内容から必要な情報をテキストファイルに書き出して、それをメールに添付して管理者宛に送信するようにしたいと考えています。 プログラム初心者のため、どのように作っていけばわかりません。 DOSで作れるものなのか、VBScriptで作れるものなのか、以下の内容からアドバイスをお願いします。 A~Cサーバ上のログ:Status1.log~Status10.log ログファイルの中身 ####################################### Status1.log 2008/09/11 00:30 "Data1 Copy Succeeded" 01:00 ####################################### ####################################### Status2.log 2008/09/11 01:00 "Data1 Copy Succeeded" 01:30 ####################################### 出力結果としてメール送付したい内容 +++++++++++++++++++++++++++++++ここからがファイルの内容+++++++++++++++++++++++++++++++++++++++++ Aサーバ 処理日   開始時間 終了時間   ステータス      2008/09/11 00:30     01:00   "Data1 Copy Succeeded" 2008/09/11 01:00     01:30   "Data2 Copy Succeeded" ・ ・ ・ ・ ・ 2008/09/11 04:30     05:00   "Data10 Copy Succeeded" #################################################### Bサーバ 処理日   開始時間 終了時間   ステータス      2008/09/11 00:30     01:00   "Data1 Copy Succeeded" 2008/09/11 01:00     01:30   "Data2 Copy Succeeded" ・ ・ ・ ・ ・ 2008/09/11 04:30     05:00   "Data10 Copy Succeeded" +++++++++++++++++++++++++++++++ここまでがファイルの内容+++++++++++++++++++++++++++++++++++++++++ 要するに、処理開始時間・終了時間ステータスを各ログファイルから取得し、時系列的にならべてテキストファイルに落とし込みたいと思っています。 複数サーバあり、それぞれのサーバで取得したテキストファイルを1つのメールに添付して送信することが出来れば、なおのこといいのですが、そのようなことも可能でしょうか。 よろしくお願いします。

  • バッチを1行記述した時の %TIME% について

    バッチファイルの行を、&で連結して1行で実行できるのですが、この際 %TIME% の値が、バッチファイルとして動かしたときと異なるため、理由や対策方法を御存知の方が、おられましたら、アドバイスを頂ければと存じます。 ■入力コマンド行 CLS & ECHO 開始時刻:%TIME% & TIMEOUT /t 2 & ECHO. & ECHO 終了時刻:%TIME% ■期待値 現在時刻が表示 2秒待機のメッセージが表示 2秒後の時刻が表示 ■実際の相違 終了時点の時刻は開始の2秒後になっていることを期待しているのですが、実際には待ち時間を幾ら増やしても、開始時刻が表示されてしまいます。 ■実行例 開始時刻:17:35:58.34 2→1→0 秒待っています。続行するには何かキーを押してください ... 終了時刻:17:35:58.34 ■背景 大きなファイルをコピーするとき、どのくらい時間が掛かるのかな?をメモする意味で、1行バッチで記述してみたのですが、どんなに大きなファイルを記述しても、終了時刻が開始時刻と同じ文字列で表示されることから、コピー部分を2秒待ちのコマンドに置き換えて、今回の質問に至りました。 コマンド1つづつ 改行してバッチファイルにして動作させると、終了時刻が更新されているのですが、1行で記述すると、終了時刻が開始時刻になっちゃうんです・・・ 原因や、解決方法(1行で期待した終了時刻を表示)をお解りの方がおられましたら、ぜひアドバイスを宜しくお願い致します。

  • DOSで秒数を表示する

    windows xpのdosで、秒数を含む現在時刻を表示のみする方法を教えてください。 timeコマンドだと秒数まで出るけど、新規に設定する時刻の入力待ちになってしまいます。表示のみできる方法を探しています。 用途は以下の通りです。 Cドライブのファイル(1GB)をDドライブにコピーするのに何秒かかるか転送速度を出すため、以下のようなbatを書きました。 time /tだと、分までしか表示できないので、使い勝手が悪いです・・・ copy.bat ------------------------- time /t cp c:\a.txt d:\b.txt time /t ------------------------- 以上、よろしくお願いします。

  • バッチファイル 複数条件判定方法

    いつも大変御世話になっております。 WindowsXP SP2に【D:\test\bat】フォルダに【test.bat】があります。 上記バッチファイルは以下のようになっています。 コード------------------------------------------------ rem --- フラグ変数 --- set OK=0 set NG=1 rem --- 初期化 --- set FLAG_A=%OK% set FLAG_B=%OK% rem --- 時間変数 --- set yyyy=%date:~-10,4% set yy=%date:~-8,2% set mm=%date:~-5,2% set dd=%date:~-2,2% set YMD=%date:~-8,10% set HHMMSS=%time:~0,8% set FILE_DATE=%date:~-10,4%%date:~-5,2%%date:~-2,2%%TIME:~0,2%%TIME:~3,2% set FILE_DATE=%FILE_DATE: =0% rem --- 存在ファイル格納フォルダ変数 --- set SERCH_DIR1=D:\sample1\ set SERCH_DIR2=D:\sample2\ rem --- ログフォルダ変数 --- set LOG_DIR1=D:\sampleLOG rem --- ログファイル変数 --- set LOG_FILE1=LOG.txt rem --- 検索対象ファイル変数 --- set SERCH_FILE1=sample1.txt set SERCH_FILE2=sample2.txt REM <STEP1> REM %SERCH_FILE1%存在チェック開始=============================================== echo %yyyy%%mm%/%dd% %HHMMSS% >> %LOG_DIR1%\%LOG_FILE1% IF EXIST %SERCH_DIR1%\%SERCH_FILE1% goto YES1 ECHO ON echo %SERCH_FILE1%が存在していません。調査して下さい。 >> %LOG_DIR1%\%LOG_FILE1% ECHO ON set FLAG_A=%NG% goto NEXT_SERCH_FILE :YES1 ECHO ON echo %SERCH_FILE1%が存在しています。 >> %LOG_DIR1%\%LOG_FILE1% ECHO OFF REM %SERCH_FILE1%存在チェック終了=============================================== PAUSE :NEXT_SERCH_FILE REM <STEP2> REM %SERCH_FILE2%存在チェック開始=============================================== echo %yyyy%%mm%/%dd% %HHMMSS% >> %LOG_DIR1%\%LOG_FILE1% IF EXIST %SERCH_DIR1%\%SERCH_FILE2% goto YES2 ECHO ON echo %SERCH_FILE2%が存在していません。調査して下さい。 >> %LOG_DIR1%\%LOG_FILE1% ECHO ON set FLAG_B=%NG% goto HANTEI :YES2 ECHO ON echo %SERCH_FILE2%が存在しています。 >> %LOG_DIR1%\%LOG_FILE1% ECHO OFF REM %SERCH_FILE2%存在チェック終了=============================================== PAUSE REM <終了処理>================================================================== :HANTEI ECHO ON echo %FLAG_A% >> %LOG_DIR1%\%LOG_FILE1% echo %FLAG_B% >> %LOG_DIR1%\%LOG_FILE1% PAUSE IF FLAG_A == %OK% IF FLAG_B == %OK% ( echo %yyyy%/%mm%/%dd% %HHMMSS% 正常終了 >> %LOG_DIR1%\%LOG_FILE1% ) ELSE ( echo %yyyy%/%mm%/%dd% %HHMMSS% 異常終了 >> %LOG_DIR1%\%LOG_FILE1% ) PAUSE コード------------------------------------------------ 一番最後の判定処理がうまく動作しません。 ※両フラグ(FLAG_AとFLAG_B)が0の時に正常終了のログをはきだし、どちらかが0ではない場合は異常終了のログをはきだす仕組みにしたいのです。 プログラムのどこに問題があるのでしょうか? バッチファイルにお詳しい方、ご教授願いますでしょうか? ※サンプルがあれば、光栄です。 何卒、宜しくお願い致します。

  • バッチファイルで常に最新の現在時刻を表示したい

    バッチファイルで最新の現在時刻を表示したいのですが、うまく行きません。 そのバッチファイル自体を実行した時刻ではなく、そのバッチファイル内のコマンド等を実行した時刻を表示させたいのです。つまりどんどん時間を最新に近いものに更新させていって欲しいのです。 タスクスケジューラのようなものをバッチファイルで作りたくて、現在時刻が○○時であればこのコマンドを実行する、といったことがしたい訳です。 バッチファイルは実行してすぐ終了するのではなく、そのまま常駐するような形を想定しています。 なにか良い方法はないでしょうか。 ■ 5秒おきに現在時刻を表示するバッチファイルの例 (同じ時刻になってしまう) @echo off :start set time=%time: =0% echo . echo . echo .「現在時刻は%time:~-11,2%時%time:~-8,2%分%time:~-5,2%秒です。」 echo . echo . ping localhost -n 5 goto start