• 締切済み

バッチ・ログファイルへの出力

<子シェル.bat>に以下のように正常/異常のEXITコードを出力させてます。 コマンド if %ERRORLEVEL% EQU 0 exit 0 if %ERRORLEVEL% NEQ 0 exit 100 <<親シェル.bat>>より上記子シェルをCallして正常/異常時にログファイルへメッセージを出力しようと思っています。 下記のように書いても正常/異常終了と関係なくログファイルへの出力はされませんでした。子シェルの実行自体はされてます。。 call 子シェル.bat IF %ERRORLEVEL% EQU 0 echo "OK" >>%logfile% 2>&1 IF %ERRORLEVEL% NEQ 0 echo "NG" >>%logfile% 2>&1 何が原因なのでしょうか・・・

みんなの回答

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

exit /b 0 exit /b 100 のようにしてみたらどうでしょうか

rere2006
質問者

補足

exit /b 0 にしても同じでした。。。

関連するQ&A

  • バッチのcallの使い方で、これって合ってるか教えてください。

    下記のようなバッチスクリプトを作りました。 ************************************** FC AAA.txt BBB.txt if not %errorlevel% EQU 0 call :ERR-SEC 10 FC CCC.txt DDD.txt if not %errorlevel% EQU 0 call :ERR-SEC 11 exit 0 :ERR-SEC echo 終了コード:[%1] > EEE.log exit %1 ************************************** 気にしているのはcallの使い方です。 どこの処理でエラーが起きたかあとでわかるように、 callでエラーセクションをパラメータを渡して呼び出し、 引数をログ出力と終了値に使用しています。 callは本来、2回終わらせる必要があると参考書に記載されていたのですが、 このバッチではexitで無理やり終わらせています。 このような使い方は問題ないでしょうか? なにか気になる点があればぜひ教えてください。 よろしくお願いします。 ちなみにOSはWindows2003Serverです。

  • bat サブルーチンのERRORLEVELについて

    バッチのサブルーチンのERRORLEVELについて質問です。 サブルーチン内でERRORLEVELを返すコマンドを実行したいのですが、 親ルーチンにそのERRORLEVELを共有したくない場合、何か方法はありますか? ============================================================ [1.bat] SET MSG1="NOTFOUND" SET MSG2="found!" echo %ERRORLEVEL% FIND %MSG1% 2.bat REM %ERRORLEVEL%は1に echo %ERRORLEVEL% CALL :LOG echo %ERRORLEVEL% FIND %MSG2% 2.bat REM %ERRORLEVEL%は0に echo %ERRORLEVEL% CALL :LOG echo %ERRORLEVEL% REM %ERRORLEVEL%は0であって欲しいが0に pause EXIT 1 :LOG FIND %MSG1% hogehoge.log REM %ERRORLEVEL%は1に ============================================================ [2.bat] found! ============================================================ [hogehoge.log] 空 ============================================================

  • バッチファイルのループ処理の質問です。

    バッチファイルのループ処理の質問です。 バッチファイルでサーバにセキュリティーパッチをインストールしたいのですが、 一件しかインストール出来ません。 ---------------------------------------------- @echo on setlocal set SrcDir=\\192.168.11.5\temp\ for %%i in (%SrcDir%*.msu) do ( %%i /quiet /norestart >>Instarll_log.log IF ERRORLEVEL 3010 GOTO ReqReboot IF ERRORLEVEL 1 GOTO NG IF ERRORLEVEL 0 GOTO OK :NG echo 異常 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :OK echo 正常 > kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log :ReqReboot echo 再起動が必要 >> kekka.log echo ERRORLEVELは%ERRORLEVEL%です。 >> kekka.log ) goto END :END endlocal ---------------------------------------------- 続けて次のファイルをインストールするにはどうすれば良いか 教えてください。

  • バッチファイル 戻り値

    いつも大変御世話になっております。 WindowsVISTA環境で以下バッチ【ABC.bat】が稼動します。 "ABC.bat"------------------------------------------------- @ECHO ON set bat_name="ABC.bat" call DEF.bat echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 "ABC.bat"------------------------------------------------- 上記バッチの構文では以下バッチDEF.batを起動させ、ERRORLEVELを取得させます。 "DEF.bat"------------------------------------------------- @ECHO ON set bat_name="DEF.bat" exit /b 10 "DEF.bat"------------------------------------------------- 実行結果は予想していたものと違っていました。 予想していた実行結果 : "ABC.bat" は戻り値 10 を受け取りました。 実際の実行結果     : "DEF.bat" は戻り値 10 を受け取りました。】 %ERRORLEVEL%のみを取得したかったのですが DEF.bat の set bat_name="DEF.bat" までも取得してしまいました。 bat_name はどうしても "ABC.bat"とCALLする側の変数を使用したいのですが 制御は難しいでしょうか? echo %bat_name% は戻り値 %ERRORLEVEL% を受け取りました。 の直前に 再度 set bat_name="ABC.bat" と記述しなければダメでしょうか? 尚、都合上、ECHO文と変数名は変えたくありません。 もしご存知の方がいらっしゃるようでしたら、お手数ですが 実現可能かどうかをご回答願いますでしょうか? 以上、何卒宜しくお願い致します。

  • BATのIF文について質問

    @echo off cls set LOGFILE=C:\%COMPUTERNAME%.log find C:\temp\setting.txt "SERVER01" /I if %ERRORLEVEL% == 1 GOTO END if %ERRORLEVEL% == 0 ( set MESSAGE=SEVER01の環境です echo %MESSAGE% echo %MESSAGE% >> %LOGFILE% GOTO SET1 ) :SET1 echo テスト >> %LOGFILE% :END こんな簡単なBATを作成してみましたがERRORLEVELが0の時処理されません (「SEVER01の環境です」がLOGに書き込まれません) (もちろんsetting.txtには「SERVER01」の文字が入ってます) (FINDのあと、「echo %errorlevel」を記述して0にもなっているのですが) IFの構文として間違っていますか?どなたかご教授ください。 OSはWindowsXP SP3 64Bitです。

  • バッチファイル 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つのログファイルに出力可能な短縮プログラムは可能でしょうか? ご存知の方がいましたら、ご教授願いますでしょうか? 何卒宜しくお願い致します。

  • バッチ処理について

    お世話になります。 バッチファイルを作成して、サーバー間でファイルのコピーを行おうと思ってます。 サーバーA:win2003server standerdEditon サーバーB:win2003server standerdEditon サーバーC:win2003server R2 standerdEditon(ServicePack1) A、Bからnet useコマンドでCをマウントしてます A→Cのコピーは大丈夫なのですが、 B→Cでは頻繁にnet useコマンドで失敗します。 サーバーBのバッチファイル if not exist P:\ net use P: \\serverC\test >> log.txt if %ERRORLEVEL% neq 0 echo エラー発生 ERRORLEVEL=%ERRORLEVEL% >> log.txt &goto END if ERRORLEVEL 0 echo 正常終了 >> log.txt のようにしているのですが、エラーなのに、 「エラー発生」がログに出ずに終了してます。 「正常終了」も 「エラー発生」もログに出ないということは、if文で評価されてないように 思うのですが、&gotoで次の処理を飛ばしているので、終了のログは出てます。 説明が不足しておりましたら追加させていただきますので、 なぜこの現象が発生するのかお知恵をお貸しいただければ幸いです。 よろしくお願いします。

  • DOSバッチでのファイル出力

    別ファイルで定義した変数内の文字列をファイル 出力したいと思っています。 REM 環境変数の設定 ※別ファイル内変数の読み込み CALL ../../ENV.BAT ・ ・ :SQLERROR echo %ERROR% >> aaa.log ---------------------------- 作成された「aaa.log」を見ると、「ECHO は <ON> です。」のような メッセージが表示され変数「%ERROR%」内の文字列がありません。 変数「%ERROR%」を固定文字列にすると出力されます。 変数内文字列の出力はどうすれば良いですか?。アドバイス お願いします。

  • バッチファイル(.bat)へWSH(.wsf)のエラーコードの返し方について

    はじめまして、kiwi88と申します。 バッチファイル(.bat)からwshスクリプト(.wsf)を呼び出すプログラムを作成しました。 そこで、wshスクリプトで実行されたエラーコードを呼び出しもとのバッチファイル(.bat)に返すことはできますでしょうか。 以下はバッチファイル(.bat)からwshスクリプト(.wsf)を呼び出す箇所のソースです。 ◆バッチファイル(test.bat)◆ ---------------------------------------- ~※処理内容省略~ cscript test.wsf //nologo //Job:wshscript > batch.log IF %ERRORLEVEL% NEQ 0 GOTO ERR exit :ERR set ret=%ERRORLEVEL% echo ****** [%:ERRORLEVEL=%ret%] ****** > err.txt exit %ret% ---------------------------------------- 以下はwshスクリプト(.wsf)のエラーコードを返す箇所のソースです。 ◆wshスクリプト(test.wsf)◆ ---------------------------------------- <job id = "wshscript"> <script language = "VBScript"> <![CDATA[ Option Explicit Function Main() ~※処理内容省略~ err = Err.Number Main = err End Function ]]> </script> </job> ---------------------------------------- 長くなってしまい、申し訳ありませんが、 ご教授願えますでしょうか。 宜しくお願いいたします。

  • 複数のプログラムのログを1つのログファイルに出力

    初めて質問させていただきます。 Bourne Shell(Bシェル)のいくつかのプログラムで1つのログファイルを 使用したいと考えています。 ログファイルは、 echo ログ >> ログファイル といった形で出力予定です。 ただ業務の仕様上、シェルプログラムが同時に動く可能性があるのですが そうした場合、やはり片方のログが出力されないといったことになるのでしょうか? よろしくお願いします。