
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
デーモンモードとは何でしょうか?
-
windows 間違ったボリュームが...
-
タスクバーの音量アイコンをク...
-
プロセスがタスクマネージャー...
-
ネットワーク使用率約75%維持状...
-
NETSTATのコマンドプロンプト画...
-
デスクトップ上の謎の白い□
-
プロンプトが返らない
-
実行中のプログラムを調べるには?
-
コマンドライン上でファイルを...
-
System Idle Processってなに?...
-
指定したプログラムの実行を禁...
-
Linux のシェルスクリプトの強...
-
UNIX コマンドにおける # や円...
-
SONYの音楽ソフト「x-アプリ」...
-
ファイル名一覧の印刷
-
bashでシングルクォート内の変...
-
スクリプトのエラー「unexpecte...
-
「環境変数名の編集」ウィンド...
-
シェルスクリプトとターミナル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TOPコマンドで表示するCPU使用...
-
プロセス、サービス、デーモン...
-
System Idle Processってなに?...
-
プロセスがタスクマネージャー...
-
タスクバーの音量アイコンをク...
-
デスクトップ上の謎の白い□
-
CPU使用率取得方法について
-
タスクマネージャのCPU率がおか...
-
スリープ状態から復帰後、DPCs...
-
Windowsで作れるスレッド最大数...
-
コマンドライン上でファイルを...
-
プロンプトが返らない
-
CPU使用率が常に50~10...
-
メディアプレイヤーが終了でき...
-
アクロバットを終了しても、プ...
-
sighupとsigtermの違い
-
イラストレータでの透明部分の...
-
デュアルCPU(デュアルコアでは...
-
デーモンモードとは何でしょうか?
-
【プログラム】 iu14d2n.tmp ...
おすすめ情報