
ERRORLEVELの使い方について質問させて頂きます。
echo Start
cmd /c test1.bat
if %ERRORLEVEL% neq 0 echo 1>mylog.txt else echo 2> mylog.txt
exit
rem test1.batの内容は、下記のようなもの
rem xxx.exe
環境変数 %ERRORLEVEL%は、DOSプロンプトであれ、
チャイルドプロセス test1.bat であれ、とにかく
エラーを保持するとのことですが、
上記のスクリプトが、どんな時でも、本当に正しく動くのか、心配です。
どうせ、ERRORLEVELをみて、何がしかの処理をするなら、
チャイルドプロセスの中で、 xxx.exeの次で、記述すべきではないかと考えます。
はたまた、別の世界(このDOSプロンプト、及びそのチャイルドプロセス以外)での
エラーは、このERRORLEVELには、影響しないのでしょうか?
さしあたり、自分で実験をしてみて、上記のバッチ、或いは、チャイルドプロセスにて記述
いずれも、動作は、期待通りでした。しかし、だからといって、どんな時でも、
期待通りに動くのかは、不明です。
ERRORLEVELは、エラーを発生させるルーチンの直下で評価すべきであり
そのルーチンがチャイルドプロセスであれば、チャイルドプロセスの中で処理すべき。
(cmd /cで戻って、ERRORLEVELを評価するのは、正しくない)
ただ、これに拘ると、スクリプトが分散されてしまい、見通しが悪くなってしまいます。
宜しく、サジェスチョンをお願い申し上げます。
No.2ベストアンサー
- 回答日時:
単なる環境変数の一つと思った方が良いです。
○○を期待する、というものではないです。あくまでプログラムの仕様です。
MSの決めた一覧なんてないと思います。少なくとも聞いたことはないです。
バッチなどで使用できるコマンドでも0やら5000やらが入り乱れています。
>環境変数 %ERRORLEVEL%は、DOSプロンプトであれ、
>チャイルドプロセス test1.bat であれ、とにかく
>エラーを保持するとのことですが、
つまり、この前提が間違いの元です。
No.1
- 回答日時:
ERRORLEVELそのものは単なる環境変数として評価されます。
誰かが変更しなければ直前の値を保持するだけで一連のスクリプト(プロセス)中で何処で設定されたかは考慮しません。
「別の世界」のエラーレベルはプロセスが異なりますので影響を受けません。(起動時から設定されているのであれば影響を受けますが)
どちらにしろ、終了時にERRORLEVELを設定しないプログラムが存在するようなので厳密にエラーを判定できるわけではないようです。
この回答への補足
コメントありがとうございます。
ERRORLEVELの仕組みを理解しているわけではないのですが、色々実験をやってみて、
正常に終了した時--------------25
処理対象ファイルがない時--------26
シリアルポートが適切でない時----21
こんな感じでした。
そのプログラムの作成者が、意図してERRORLEVELを設定していないにしても
確かに、処理結果によって、値が変わっていました。
再現性はありますので、信じてよいのだろうとは思いますが、
原理を理解しておきたいと思います。
例えば、正常終了時の値は、作成者責任(デファオルは0)
マイクロソフトが決めた一覧があって、その値を+-して、
具体的なERRORLEVELは、決まる(DOS側がコントロールする)
宜しくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- その他(プログラミング・Web制作) 単純なコマンドプロンプトが動きません。 2 2022/04/19 15:21
- その他(学校・勉強) この中で間違ってある説明はありますか?詳しい方に教えていただきたいです。 A. 1つのプログラムが複 2 2023/07/14 01:15
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- JavaScript [再掲]指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードについて 1 2023/05/10 15:09
- PHP PHP一覧表示した項目にリンクをはりたい 1 2023/07/12 17:08
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP ECCUBE4のページ管理でPHPを実行させたい 1 2023/04/06 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
CPU使用率が常に50~10...
-
windows7
-
プロセスがファイルを掴んだま...
-
Windowsで作れるスレッド最大数...
-
タスクマネージャで終了できな...
-
プロセス、サービス、デーモン...
-
子孫プロセスを全て終了
-
ps コマンドのステータス。S Ss...
-
Powershell プロセス二重起動
-
アクロバットを終了しても、プ...
-
プロンプトが返らない
-
/etc/inittabの"wait"アクショ...
-
CPU使用率とロードアベレージ
-
linuxでプロセスが動いているCP...
-
デスクトップ上の謎の白い□
-
イラストレータでの透明部分の...
-
実行中のプログラムを調べるには?
-
コマンドライン上でファイルを...
-
Windows 7 Pro 64bitについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
タスクマネージャのCPU率がおか...
-
タスクバーの音量アイコンをク...
-
System Idle Processってなに?...
-
アクロバットを終了しても、プ...
-
タスクマネージャに表示されな...
-
linuxでプロセスが動いているCP...
-
ネットワーク使用率約75%維持状...
-
プロンプトが返らない
-
イラストレータでの透明部分の...
-
プロセスの終了について教えて...
-
プロセスがタスクマネージャー...
-
CPU使用率が常に50~10...
-
Windowsで作れるスレッド最大数...
-
強制終了できないプロセスの強...
-
Windowsで同時にオープンできる...
-
デーモンモードとは何でしょうか?
-
cpuの使用率が50%以上常にあ...
-
メディアプレイヤーが終了でき...
おすすめ情報