こんばんは。
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=○」でセットする違いについて教えて頂ければと思います。
お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ERRORLEVELは、一般の環境変数と異なり、SET で値を代入してはいけません。

(参考: set /? で表示される最終ページ)
SET を使うと一般の環境変数となってしまい、次にSETするまで値は変わりません。コマンドの実行結果と切り離されると言うことです。
%ERRORLEVEL%は、環境変数ERRORLEVELがセットされていないときに限って、直前のコマンドの実行結果ステータスに置換されます。
(7)によってアンセットされたので、再びコマンド実行結果を表すようになりました(8)。

環境変数ERRORLEVELに値がセットされているかどうかは、SET ERRORLEVELでわかります。つまり、%ERRORLEVEL%をコマンドの実行結果として使うためには、

C:\>set errorlevel
環境変数 errorlevel が定義されていません

という状態でないといけません。
%ERRORLEVEL%をゼロにしたければ、
C:\>cd
とかの正常終了するコマンドを打てばいいです(ECHOは除く)。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。

「一般の環境変数」という考え方が判りませんが、変数と考えれば良いのでしょうか。

「set /?」で
--------------------------------------------------------------
コマンド拡張機能が有効な場合、
SETによって表示される変数の一覧には現れない
いくつかの動的な環境変数があります。
これらの変数の値は、変数の値が展開されるときに動的に計算されます。
ユーザーがこれらの名前の変数を明示的に定義する場合、
その定義は下記の動的な定義を無効にします。
--------------------------------------------------------------
とありました。
その文章以下に書いてある%CD%~%CMDCMDLINE%はSETで値を設定してはいけないということですね。

・ERRORLEVELの値は実行結果により、動的に値が変更される。
・SETで値を代入すると、動的に設定された値よりSETで代入した値を優先して参照する。
という理解です。

「set errorlevel=○」で設定した値を消去するには「set errorlevel=」
「exit /b ○」で設定した値を消去するには「C:\>cd」
を行えばよいのですね。

cd以外でも
C:\>dir
を実行した所、「exit /b ○」の終了コードが無効になったことを確認しました。

お礼日時:2009/08/13 10:06

set errorlevel=○


とすると環境変数errorlevelの値がセットされる。
exit /b ○
とするとシステム変数errorlevelの値がセットされる。これは自動的に環境変数errorlevelにもセットされる。

echo %errorlevel%
としたとき環境変数errorlevelがセットされていればその値を書く。セットされていなければシステム変数errorlevelその値を書く。

set errorlevel=
としたとき消去されるのは環境変数errorlevelの値である。

この回答への補足

回答ありがとうございます。

「環境変数」と「システム変数」という違いがあるのですね。
どのような違いがあるのか、今の私にはまだ判らないのですが。

「コントロールパネル」→「システム」→「詳細設定」→「環境変数」→「システム環境変数」
に「変数名」「変数値」を設定した所、回答者様がおっしゃる所の環境変数の値になりました。

「echo %errorlevel%」で
環境変数がセットされていればその値を、セットされていなければシステム変数を表示する、
は理解しました。

一つだけ腑に落ちないのが
(4)で環境変数に0がセットされましたが、
(6)で0を表示しているということは
(5)ではシステム変数に2をセットしているが、環境変数には2をセットしていないことになります。
このことが

>exit /b ○
>とするとシステム変数errorlevelの値がセットされる。これは自動的に環境変数errorlevelにもセットされる。

に矛盾していると考えました。お言葉を返すようですみません。

補足日時:2009/08/13 10:54
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q極座標r→/r = er→

極座標において、r→ = rer→
と表せ、この

er(t) = cosθ(t) i → + sinθ(t) j→
で表せることも理解できました。

でもなぜ

r→ / r が er →

なのでしょうか。

ご教授お願い申し上げます。

Aベストアンサー

 e ベクトルは、単位長さのベクトルを表します。
i、j もまた、単位ベクトルですね。

>er(t) = cosθ(t) i → + sinθ(t) j→
>で表せることも理解できました。

 あなたが理解したように、
ベクトルe_r は、rベクトル方向の単位長さのベクトルということです。

Q☆BAT:日時をTXTファイル名にして出力するには

例えば作成したいテキストファイルが有るとします。
現行はBAT実行の都度、手作業でファイル名を「年月日時分秒」にリネームしています。
これを自動処理する妙案が有れば是非ご指導下さい。
宜しくお願いいたします。
echo %COMPUTERNAME%今日は良いお天気ですね > D:\yyyymmdd_hhmmss.txt
以上

Aベストアンサー

こんな感じでいかがでしょうか。

echo off
set yyyymmdd=%date:~-10%
set yyyymmdd=%yyyymmdd:/=%
set hhmmss=%time::=%
set hhmmss=%hhmmss:~0,6%
set hhmmss=%hhmmss: =0%
echo %COMPUTERNAME%今日は良いお天気ですね >D:\%yyyymmdd%_%hhmmss%.txt

QER34にR34GTRの・・・

ER34 25GT-T(前期型)に乗っているのですが、ER34にR34GTRの純正フロントリップは装着できるのでしょうか?
もし取付けられたとした場合、格好的には違和感を感じるものになるのでしょうか?皆様の周りで取付けている方がいらっしゃったら教えてください。
(ちなみに現在私の車のフロントバンパーはノーマル純正のままです。)

Aベストアンサー

こんばんは。
フロントバンパーの形状が違うので、装着はできないと思います。
どうしても装着したいのであれば、フロントバンパーごと交換して、それに装着するしかないですね。
ただ、GT-RとGT-Tではフェンダーの形状が異なるので、バンパーも装着不可かも知れません。
純正部品のことなら、お近くのレッドステージへ…ってCMみたいですね(^^;
でも、ディーラーなら過去に同じようなケースがあったかも知れないし、データがあるかもしれないので、
一度、ディーラーに質問してみるのが一番確実だと思います。

QTXT内の指定文字を検索するBATファイル

タイトルは不完全なのですが、
1.作成したバッチファイルに調べたいテキストファイルを複数ドロップ読み込み
2.ファイルに指定した文字列が含まれない場合そのファイル名を表示する
3.テキストファイルとして出力する。

と言うような動作を行いたいと思っています。一番の問題点が2番です。

ドロップし文字列検索からファイル名表示なら以下で良いと思うのですが、
   findstr /M /C:"スペース含む指定文字列" %1
オプション/Mは一致する時に出力なので、含まれない場合は出来ません。

ifコマンドも試して見ましたが理解が出来てない為かどうもよく判りません。
どなたか教えていただけると助かります。

尚、作成目的としては大量にあるログからの問題箇所の発見です。
1つの検査するファイルに付き1つのエラーチェックログが作成されます。
例えばログファイルに"D 0000"の様に全て0であれば問題無いのですが、
"D 0538"の様に0でなくなると異常が出ている事になります。

しかし、大量のテキストファイルを見ていくのは手間ですから、
どこのログファイルが問題か自動的に探して欲しいのです。

タイトルは不完全なのですが、
1.作成したバッチファイルに調べたいテキストファイルを複数ドロップ読み込み
2.ファイルに指定した文字列が含まれない場合そのファイル名を表示する
3.テキストファイルとして出力する。

と言うような動作を行いたいと思っています。一番の問題点が2番です。

ドロップし文字列検索からファイル名表示なら以下で良いと思うのですが、
   findstr /M /C:"スペース含む指定文字列" %1
オプション/Mは一致する時に出力なので、含まれない場合は出来ません。

ifコマンドも試し...続きを読む

Aベストアンサー

FINDSTR を実行した後で ERRORLEVEL によって出力する/出力しないを判定すればいいと思います。

@echo off
:LOOP
if "%1" == "" goto END
findstr /C:"D 0000" "%1">nul
if errorlevel 1 echo %1
shift
goto LOOP
:END
pause

Q(-er),(r)の発音の仕方を教えてください

来春アメリカに駐在するのですが、アメリカ英語の発音に自信がありま
せん。イギリス英語なら少しは出来ると思います。特にアメリカ英語の(-er), (r) {例えばKirk, teacherなどの発音(-ir),(-er)}がネイティブのように響きません。
アメリカ人の会話の先生に,舌の動かし方など聞いたのですが、アコーデオンのように舌を引くとしか説明してくれません。
そのた、「英語耳」などの日本の教材も“舌の根元を持ち上げてうなる”とか“舌先を持ち上げて後ろへ引く”とかだけで、もっと詳しい説明がありません。
これらの説明に従って発音練習をしてますが未だにネイティブのような響きが出ません。
どなたかアメリカ英語の(-er)の発音の出し方を詳しく説明して頂ければ幸いです。

Aベストアンサー

私はtjhirokoさんの説明の2番目の方法が一番近いと思います

本によると、その発音方法は[w]の様にくちびるを少しつきだした口がまえで、舌のまんなかからスタートして後ろへ引き、舌の前半を口内の上側に近づけてあいまい母音の[ア]を発声します。その時舌先はほとんど上がっていません。そうすることにより舌と口内の上側との間隔がせばまり、発音する時に空気が振動するのでアメリカ英語の[er]の響きになります。 
要するに、口を少しつきだし、舌のまんなかから開始して舌全体を引くことです。これを舌先から開始して、舌先を上にあげて力をいれて、喉のほうへ押ようにすると、舌全体がかたくなって[er] の響きが出にくくなります。[er]だけ単独で発音しにくいので、[w]を前につけて練習します。work,workとくり返して[er]の発音を練習します。

(舌先を[w]のように少し前へ突き出すと、その反動で舌全体を喉の方へ引きやすくなるからです。ネイティブはこの舌を少し前にだす動きを無意識に実行しているのに、本人たちはあまり気づいていません。)

QC:\Windows> から C:\Windows\Win98>への変更方法

次のMS DOSプロンプトの状態から
C:\Windows>

次のMS DOSプロンプトの状態にしたい。
C:\Windows\Win98>

色々試して見ましたがうまくいきませんので、教えてください。テストした結果は以下の通りです。

C:\Windows> CD \   と入力してEnterします
C:\>CD C:\Windows\Win98  と入力してEnterします

ディレクトリーの指定が違いますと、表示されてうまくいきません。

Aベストアンサー

>C:\>CD C:\Windows\Win98  と入力してEnterします

↑で別に間違ってはいないので、"C:\WINDOWS\win98"ディレクトリが存在しないのでは?

dir c:\windows\win98

で確認してみた方が良いと思います。

Q教えて For Each R In Target

いつもお世話になっております
よろしくお願いします

ネットで見つけたマクロなのですが、どなたか解説していただけないでしょうか

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim R As Range

For Each R In Target
With R

条件判断と処理

End With
Next R

End Sub

Aベストアンサー

Worksheet_Change:シートに変更があったら

For Each R In Target:選択されているセル範囲を順番に

With R:順番に回っている現在のセルに対して

条件判断と処理を実行

End With:Withの終了

Next R:次のセルへ、全て回り終えたら終了

End Sub:終了

Qソフトウェアテストに関して、stress test とload test の違いはどこにあるのでしょうか?

ソフトウェアテストに関して、stress test とload test の違いはどこにあるのでしょうか?
webで検索するとstress testは負荷をかけて応答性能などの劣化度合いを調べるもののようですが、load testも似たような意味合いではないかと思うのですが、違いがいまひとつわかりません。

Aベストアンサー

http://www.jstqb.jp/syllabus.html
ソフトウェアテスト標準用語集 日本語版Ver 1.1 (2006/12/22 )
作成:国際ソフトウェアテスト資格認定委員会 用語集作業班
編集者:Erik van Veenendaal(オランダ)
(翻訳:Japan Software Testing Qualifications Board 技術委員会)

上記の用語集によると、以下のような記述があります。

/* 引用はじまり。*/

ストレステスト(stress testing): 要件で定義した限界、または、それを超えた条件で、システムやコンポ-ネントを評価するテスト。

ロ-ドテスト(load testing): コンポ-ネントやシステムの動作を測定するテストの一種。負荷(例えば、並列実行ユ-ザ数やトランザクションの数)を増加させ、コンポ-ネントやシステムがどの程度の負荷に耐えられるか判定する。

/* 引用おわり。*/

これを元に、個人的には以下のように解釈しています。

ストレステスト→仕様で定められているMAXまたはMINでも正常に動作するのかどうかを確認する。もし、その値を越えた場合にエラーメッセージを出すなどのテストケースであれば、その表示や動作を確認できればOK。

ロードテスト→単にエラーメッセージの表示などを確認するだけでなく、様々な負荷をかけ、それでも正常に動作することを確認する。エージングなどの言葉が使われるのは、こちらの方ですね。

つまるところ、程度の度合いになってきますが、意味的には以下のような感じですね。

ストレステスト < ロードテスト

http://www.jstqb.jp/syllabus.html
ソフトウェアテスト標準用語集 日本語版Ver 1.1 (2006/12/22 )
作成:国際ソフトウェアテスト資格認定委員会 用語集作業班
編集者:Erik van Veenendaal(オランダ)
(翻訳:Japan Software Testing Qualifications Board 技術委員会)

上記の用語集によると、以下のような記述があります。

/* 引用はじまり。*/

ストレステスト(stress testing): 要件で定義した限界、または、それを超えた条件で、システムやコンポ-ネントを評価するテスト。

ロ-ドテスト(l...続きを読む

Qmade in p.r.o.c

made in p.r.o.cってどこかの国の生産ってことだと思うんですけど、どこの国なのでしょうか?

Aベストアンサー

中華人民共和国("People's Republic of China")では?

参考URL:http://www.mofa.go.jp/mofaj/area/china/index.html

QRPGで0が非表示になる。0は0と表示したい。

DDSで

E1SJSU 12P 3 COLHDG('指示数')

と指定して、

RPGで

MOVE E1SJSU E2SJSU 桁数7桁 小数点桁数0
MOVELE2SJSU S1SJSU

画面設計で

S1SJSU 4Y 小数点0桁 O(オー) 6行目の71桁目 EDTCDE('Z')

とやると、

データ上で

10.000
3.000
0.000

となっているデータが、

画面上では

10
3


となってしまいます。

ちょっと分かりづらいかもしれませんが、
0.000のデータが非表示になってしまいます。
指示数0のデータは、0と表示したいのですがどのようにすれば宜しいでしょうか?

Aベストアンサー

EDTCDE('Z')は、0の場合表示しないという設定です。
ですから、URLを参考に適切なEDTCDEを選択する必要があります。

参考URL:http://ramat.ram.ne.jp/editcode.htm


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報