257) WinMEでERRORLEVELが返らない K.OOTSUKI 2003/05/25(日) 10:20 |
|
K.OOTSUKIと申します。 初めて質問させていただきます。 WindowsMEとWindows2000でバッチファイルを作っています。以下のようなテストを行うとWindows2000だと ERRORLEVELは0なり1なり変化していきますが、WindowsMEだとERRORLEVELは空白(NULL)のまま変化しません。 ERRORLEVELの値でコマンドの成功不成功を判断したいのですが、こういう仕様なのでしょうか?ヘルプとかHPを検索しましたがはっきりしません。 よろしくお願いします。 echo on echo errorlevel=%errorlevel% echo aaaaaaa >file.txt echo errorlevel=%errorlevel% copy file.txt file2.txt echo errorlevel=%errorlevel% del file.txt echo errorlevel=%errorlevel% copy file.txt file2.txt echo errorlevel=%errorlevel% pause |
|
258) Re:WinMEでERRORLEVELが返らない Hellcat 2003/05/25(日) 13:59 |
|
>WindowsMEとWindows2000でバッチファイルを 作っています。以下のようなテストを行うとWindows2000だとERRORLEVELは0なり1なり変化していきますが、WindowsMEだと
ERRORLEVELは空白(NULL)のまま変化しません。 WinMEでは、環境変数"ERRORLEVEL"にリターンコードを自動的にセットするという機能はないと思います。 リターンコードを環境変数にセットしたい場合は、自ら行うしかありません。 リターンコードを環境変数にセットする方法として、 BU (BATUTY)コマンド(フリーソフト)があります。 使い方 bu -nERRORLEVEL dsperrorlevel これを実行すると、直前に実行したコマンドのリターンコードが環境変数"ERRORLEVEL"にセットされます(-n以下に任意の環境変数名称を指定できる)。 BU (BATUTY)は、以下にあります。 http://www.vector.co.jp/soft/dos/util/se023753.html 確認OS WindowsME ver 4.90.3000 |
|
this article refers Vector Soft Library..
|
|
260) Re2:WinMEでERRORLEVELが返らない K.OOTSUKI 2003/05/25(日) 14:34 |
|
Hellcatさん、回答ありがとうございました。 ダウンロードしてみました。 いろいろなツールがあるもんですね。 ちょっと使い方考えてみます。 これからもよろしくお願いします。 |
|
259) Re:WinMEでERRORLEVELが返らない YanaKen 2003/05/25(日) 14:23 |
|
K.OOTSUKIさん、こんにちは。 >WindowsMEとWindows2000でバッチファイルを作っています。以下のようなテストを行うとWindows2000だと ERRORLEVELは0なり1なり変化していきますが、WindowsMEだとERRORLEVELは空白(NULL)のまま変化しません。 ERRORLEVELの値でコマンドの成功不成功を判断したいのですが、こういう仕様なのでしょうか?ヘルプとかHPを検索しましたがはっきりしません。 よろしくお願いします。 (中略) >echo errorlevel=%errorlevel% (後略) ERRORLEVELの基本的な使い方については、下記を参照されることをおすすめします。 ここに書いてあるやりかたで使うぶんには、DOS/Windows95/98/Me/NT/2000/XPどれでも同じように動作します。 http://fpcu.on.coocan.jp/dosvcmd/batch.htm#if ※本来、ERRORLEVELは「環境変数」とは異なる種類のシステム変数です。たぶんそのへんで混乱されているのだと思います。 K.OOTSUKIさんがご自分の作例として挙げてらっしゃる手順は、「環境変数としてのERRORLEVEL」を参照する手法になっていますが、 ERRORLEVELの数値が自動的に環境変数にもセットされるのはNT系の拡張機能ですから、その部分はMeでは使えません。 ただ、DOS/Windows95系でも、自力で次のような処理をバッチファイルに加えれることで、似たような処理も(論理的には)可能ではあります。 :CHKERR.BAT @ECHO OFF SET ERRORLEVEL=0です。 %1 %2 %3 %4 %5 IF ERRORLEVEL 1 SET ERRORLEVEL=1です。 IF ERRORLEVEL 2 SET ERRORLEVEL=2です。 IF ERRORLEVEL 3 SET ERRORLEVEL=3です。 IF ERRORLEVEL 4 SET ERRORLEVEL=4です。 IF ERRORLEVEL 5 SET ERRORLEVEL=5以上でした。 ECHO 返ってきたERRORLEVELは %ERRORLEVEL%。 ↑の使用例 CHKERR DIR *.X YanaKen [個人homepage] [@pay導入について] [YanaKenの@pay窓口] |
|
261) Re2:WinMEでERRORLEVELが返らない K.OOTSUKI 2003/05/25(日) 15:20 |
|
YanaKenさん、回答ありがとうございました。 ERRORLEVELは環境変数ではないようですね。 WinMEではcopyコマンド後はERRORLEVELを見れないようです。 Yanakenさんの例題もピンとは来ないので実験してみます。 これからもよろしくお願いします。 |
|
262) Re2:WinMEでERRORLEVELが返らない ふぇむ 2003/05/25(日) 23:09 |
|
Yanakenさま >IF ERRORLEVEL 1 SET ERRORLEVEL=1です。 >IF ERRORLEVEL 2 SET ERRORLEVEL=2です。 >IF ERRORLEVEL 3 SET ERRORLEVEL=3です。 >IF ERRORLEVEL 4 SET ERRORLEVEL=4です。 >IF ERRORLEVEL 5 SET ERRORLEVEL=5以上でした。 IF ERRORLEVEL の判定は「以上」で判断されるのではありませんでしたっけ。上記は順序を逆にしないと意図したようには動かないんじゃなかったでしょうか。 |
|
263) Re3:WinMEでERRORLEVELが返らない YanaKen 2003/05/26(月) 08:25 |
|
ふぇむさん こんにちは~。いつもどうもです。 >>IF ERRORLEVEL 1 SET ERRORLEVEL=1です。 >>IF ERRORLEVEL 2 SET ERRORLEVEL=2です。 >>IF ERRORLEVEL 3 SET ERRORLEVEL=3です。 >>IF ERRORLEVEL 4 SET ERRORLEVEL=4です。 >>IF ERRORLEVEL 5 SET ERRORLEVEL=5以上でした。 > >IF ERRORLEVEL の判定は「以上」で判断されるのではありませんでしたっけ。上記は順序を逆にしないと意図したようには動かないんじゃなかったでしょうか。 いえいえ、この場合は(IF ERRORLEVELが「以上」で成立するからこそ)この順序が必要です。実はぼくも、あとで気づいて直した結果がこのサンプルなわけで(^^;。 実際にこれを逆順にして処理の流れを追うと、 >>IF ERRORLEVEL 5 SET ERRORLEVEL=5以上でした。 この行はERRORLEVEL 5以上のときだけ実行されます。 >>IF ERRORLEVEL 4 SET ERRORLEVEL=4です。 この行はERRORLEVEL 4以上のとき実行されます。(したがってERRORLEVEL 5以上のときも 環境変数には"4"が設定されます) (中略) >>IF ERRORLEVEL 1 SET ERRORLEVEL=1です。 この行はERRORLEVEL 1以上のとき常に実行されますから、実際のERRORLEVELが2でも3でも5でも環境変数には「1です。」が設定されてしまい、上のほうの行はムダになります(^^;。 YanaKen [個人homepage] [@pay導入について] [YanaKenの@pay窓口] |
|
264) Re4:WinMEでERRORLEVELが返らない ふぇむ 2003/05/27(火) 00:15 |
|
> いえいえ、この場合は(IF ERRORLEVELが「以上」で成立するからこそ)この順序が必要です。実はぼくも、あとで気づいて直した結果がこのサンプルなわけで(^^;。 あ、そうですね。GOTO で逃がしているわけじゃないのか...。 このパターンを見て、マッチしたらGOTOでとばすケースが暗黙に脳裏に浮かんでしまいました。なんとなく一見しただけで判断してしまってよくみてませんでした。ごめんなさい。 |