DOS終了コードの確認方法とは

このQ&Aのポイント
  • バッチファイルの終了コードの確認方法について教えてください。
  • TXTファイルで文字列検索を行い、該当の文字列が見つかった場合に終了コードを1で終了する方法についても教えてください。
  • バッチファイルの終了コードが正しく出力されているかどうかの確認方法について教えてください。
回答を見る
  • ベストアンサー

DOS終了コードの確認

有識者の方、バッチファイルの終了コードの確認方法について、ご教授願います。当方、終了コード判定のBAT作成は初めてです。 質問: TXT(a.txt)ファイル、文字列検索を行った結果、該当の文字列が見つかった場合、終了コードを"0"では無く、"1"でバッチファイルを終了する場合(EXITコマンド終了コード1)、バッチファイルの終了コード"1"が正しく出されているのか確認の仕方を教えてください。 よろしくお願い致します。 +++temp.bat+++++ Find C:\temp\a.txt "aaa" →%ERRORLEBEL%の結果 0 IF NOT ERRORLEVEL 1 (exit /B 1)

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

  • ベストアンサー
  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

@echo off call temp.bat if not errorlevel 2 goto LV1 echo "Exit Code 2" goto exit0 :LV1 if not errorlevel 1 goto LV0 echo "Exit Code 1" goto exit 0 :LV0 echo "Exit Code 0" :Exit0 といった具合に errorlevelを大きい物から順に処理していきます

fwiv3867
質問者

お礼

結果が見れてとてもうれしいです。"Exit Code 1"。 理解出来ました、有難うございます。

関連するQ&A

  • 終了コード errorlevel の考え方について

    こんばんは。 OSはWindowsXP Proを使っています。 テキストファイルに書いてある値を 終了コードにするバッチファイルを作成しました。 以下の2ファイルを同じディレクトリに保存します。 test.txt ┌--------┐   1 └--------┘ test.bat ┌---------------------------------------┐   @echo off   find "0" test.txt   if not errorlevel 1 exit /b 0   find "1" test.txt   if not errorlevel 1 exit /b 1   echo テキストは0~1の値ではありません。   exit /b 2 └---------------------------------------┘ この状態で次のように実行します (1) C:\>test.bat ---------- TEST.TXT ---------- TEST.TXT 1 (2) C:\>echo %errorlevel% 1 (3) C:\>set errorlevel=0 (4) C:\>echo %errorlevel% 0 ※ここでtest.txtの中の数字を2にします。 (5) C:\>test.bat ---------- TEST.TXT ---------- TEST.TXT テキストは0~1の値ではありません。 (6) C:\>echo %errorlevel% 0 (7) C:\>set errorlevel= (8) C:\>echo %errorlevel% 2 となります。 (2)の結果から、(1)で実行した「exit /b 1」でerrorlevelに1が格納されることが判ります。 しかし、(6)の結果から、(3)で実行した「set errorlevel=0」が (5)で実行した「exit /b 2」より優先されていることが判ります。 しかし(7)でerrorlevelの値を消去したように思われますが、 (8)の結果から、(3)のセットを消去しつつ(5)で実行した「exit /b 2」を記憶しているように見えます。 この挙動について、どのように理解すれば良いのでしょうか。 また「exit /b ○」と「set errorlevel=○」でセットする違いについて教えて頂ければと思います。 お願いします。

  • バッチファイル(.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> ---------------------------------------- 長くなってしまい、申し訳ありませんが、 ご教授願えますでしょうか。 宜しくお願いいたします。

  • Cで、呼び元のDOSバッチを終了させたい

    DOSのバッチからexeを呼んで、そのexe内で呼び元であるバッチファイルの呼んだ行以降に行かないようにしたいのですが出来るでしょうか? バッチでerrorlevel拾って判断して終わらせる(EXIT? )のではなく、EXE内でDOS窓を閉じたいのです。 C++で書いてます。 どなたかわかる方知恵をお願いいたします。 出来ないというのでもかまいませんが・・

  • DOSバッチファイルへの引き渡し方法

    次のような操作をしたいのですが。 御教示下さい。 操作の流れ テキストファイルに一文字出力する CMD1 > a.txt テキストファイルa.txtには、一文字しかはいらない 1やa など そのa.txt の内容を判断して バッチファイルb.bat内で分岐処理したい   b.bat 内  if 'a.txtの内容' により分岐処理

  • 子バッチの変数を親バッチで取得したい

    行き詰まりましてぜひともみなさんの知恵をお借りしたいです。 現在a.bat(親)と b.bat(子)があります。a.bat で call b.bat して b.batである処理の結果(文字列)を変数Palaにセットしました。 ここでこのb.batのなかの変数Palaの値をa.bat(親)で取得したいですが なにかいい方法がありますか?TEMPファイルへ書き込んでからa.bat(親)終了時に削除する方法以外でおねがいします。 以下はバッチファイルの一部分です。 a.bat(親) ---------------- call b.bat --------------- b.bat(子) *************** FOR /F "tokens=1" ・・・・・・・ "%1" temp.txt') do set Pala=%%l (%Pala%はいつも値は存在する。 この%Pala%をa.batで使いたいですが取得方法がわかりません) ***************

  • DOS 特定の文字列を含むファイルのみの抽出方法

    C直下に2つのテキストファイル「A.txt」「B.txt」が存在するとします。 Aには「Start」、Bには「Second」という文字列が含まれているとします。 これらのテキストを、BATを使って『テキスト内に特定の文字列が含まれているファイル』のみをDOSプロンプト上に表示する方法をご教示願います。 ■想定するコマンド実行結果 ・Start.BATを実行→DOSプロンプトにて「A.txt」のみが表示する。 ・Second.BATを実行→DOSプロンプトにて「B.txt」のみが表示する。 よろしくお願いします。

  • バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが

    バッチファイルでFINDSTRを使って文字列検索をしたいが、ファイルが開けない (1)と(2)のバッチファイルを作りました。それぞれ単体で実行すると、エラーは出ません。 (1)と(2)を一緒にした(3)というバッチファイルで実行すると、FINDSTRのところで、 「ファイルを開くことができません」というエラーが出て、途中でとまってしまいます。 エラーを出さずに実行する方法は何かないでしょうか? (A.batは、CドライブにあるWord.exeを実行するだけのバッチファイルです。) どうぞよろしくお願いします。 【(3)の中身】 call A.bat >kekka.txt   ←この1行だけが(1)のバッチファイルの中身です GOTO kensaku GOTO :EOF ::文字列検索 :kensaku SET keyword=作成しました。   ←この行から下が(2)のバッチファイルの中身です FINDSTR %keyword% kensaku.txt > NUL GOTO kekka%ERRORLEVEL% GOTO :EOF :kekka0 REM 文字列あり ECHO %keyword%がありました PAUSE > nul GOTO :EOF :kekka1 REM 文字列なし ECHO %keyword%はありませんでした。 PAUSE > nul GOTO :EOF

  • バッチファイル ワイルドカード処理確認方法

    お世話になります。 WindowsXP環境にて下記のバッチファイルがあります。 コード------------------------------- COPY D:\in\L*.txt E:\out1\L*.txt MOVE D:\in\L*.txt F:\out2\P*.txt コード------------------------------- こういうワイルドカードを使用したコピー・移動処理がうまくいったかどうかを 確認する方法として、if %errorlevel%~ で一番無難なのでしょうか? if %errorlevel%~を追加するのであれば、 上記コードだと・・・ コピー処理後に if %errorlevel%~ そして問題無ければ今度は移動処理・・・ さらにif %errorlevel%~ それともForとかでまわさないと確実な確認が出来ないのでしょうか? Forだとコードが増えるので極力避けたいですが・・・。 ご存知の方がいれば、ご教授願います。 宜しくお願い致します。

  • 実行結果を戻り値で取得したい

    MS-DOSバッチの実行結果を文字列で取得したいです。 イメージ例としては、下記のようなバッチ2つがあり、 バッチAを起動します。そうすると実行結果の戻り値として 「TEST」という文字列が取得できたら良いです。  ※下記例では「ERRORLEVEL」に入っているようなイメージです。 しかしながら、ERRORLELVEに格納できるのは数値のみの為、 エラーになってしまいます。 どうすれば、実行結果を戻り値で取得できるでしょうか? お手数ですが、MS-DOSで不可能な場合、VBScriptやWSHでも かまいませんので、処理をキックしてその戻り値を文字列で取得する方法を お教えください。お願いいたします。 -------------------------------- 例 【バッチA】 call バッチB echo %ERRORLEVEL% 【バッチB】 exit /b "TEST" -------------------------------- と実行し

  • DOSバッチでフォルダ配下の全ファイルの一致確認

    Windowsのコマンドプロンプトのバッチファイルで 2つのフォルダの配下にあるファイルがすべて完全に 一致することを確認するバッチファイルを作成しています。 下記のようなコードまではできたのですが、 現状ではコードの「pause」の所で、 一度、止めて、人が、 list1.txtのファイルから環境変数xの文字列 (ここではC:\document\A\) list2.txtのファイルから環境変数yの文字列 (ここではC:\document\B\) を削除して保存し直してから続行しないと うまくいきません。 回避策として、pauseの所で、 list1.txtのファイルを1行ずつ読み込んで 環境変数xの文字列を空白文字に置換して 上書き保存する。 list2.txtのファイルを1行ずつ読み込んで 環境変数yの文字列を空白文字に置換して 上書き保存する。 ということをしたいのですが、 (方法1) set 環境変数=%環境変数:置換前文字列=置換後文字列% の置換前文字列を環境変数%x%で指定することが できないようなのでうまくいきません。 (方法2) 環境変数xの文字列の文字数を環境変数lenに入れて set 環境変数=%環境変数:~開始文字位置,文字数% の開始文字位置を環境変数%len%で指定することが できないようなのでうまくいきません。 何かよい方法はないでしょうか。 ---test.bat--------------------------------- @setlocal enabledelayedexpansion @echo off rem 以下の2行を実行前に書き換える set x=C:\document\A\ set y=C:\document\B\ set w=FC: 相違点は検出されませんでした set w=%w:~0,18% set v=***** set v=%v:~0,5% if exist list1.txt del list1.txt if exist list2.txt del list2.txt if exist huichi1.txt del huichi1.txt if exist huichi2.txt del huichi2.txt dir /b /s /a-d %x% > list1.txt dir /b /s /a-d %y% > list2.txt pause fc /n /w list1.txt list2.txt > huichi1.txt for /F "delims=" %%i in (huichi1.txt) do ( set j=%%i set j=!j:~0,18! if !j!==!w! goto OK1 ) set /p z="両者は一致しませんでした。huichi1.txtを確認してください。" goto END :OK1 for /F "delims=" %%i in (list1.txt) do ( fc /n /w "%x%%%i" "%y%%%i" >> huichi2.txt ) set u=0 for /F "delims=" %%i in (huichi2.txt) do ( set j=%%i set j=!j:~0,5! if !j!==!v! set u=1 ) if %u%==0 ( set /p z="両者は完全に一致しました。" ) else ( set /p z="両者は一致しませんでした。huichi2.txtを確認してください。" ) :END ------------------------------------ 【条件】  ・Wondows7のコマンドプロンプトで実行する。  ・他のツール(perlなど)は使用しない。  ・test.batは   set x=C:\document\A\   set y=C:\document\B\   の部分のみをその都度書き換えて使用する。 よろしくお願いします。

専門家に質問してみよう