#navi(全般) ''環境変数について'' #contents //////////////////////////////////////////////////////////////////////////// *隠し環境変数 [#z04be748] set "" を実行すると、set を実行したときに加えて、= で始まる環境変数が表示される。 :%=ExitCode%|直近に実行した外部コマンドの終了コード。外部コマンド実行直後は、ERRORLEVEL と同じ値。 内部コマンドの実行によって ERRORLEVEL が変化しても影響は受けない。 :%=C:%|Cドライブのカレントディレクトリ。%=D:% 等も同様。 そのドライブにカレントディレクトリを移動したことが無ければ、 そのドライブレターに対応する変数は存在しない。 //////////////////////////////////////////////////////////////////////////// *ERRORLEVELの値セット [#ia768186] ERRORLEVELの値はsetで変更できないので、任意の値にセットするには、 echo exit /b 値 > tmp.bat call tmp.bat のように、exit を含んだ一時バッチファイルを作る必要がある。 ただし、多くの場合はゼロか非ゼロにセットできれば十分だろう。 いくつかの内部コマンドは ERRORLEVEL の値を変更するので、 副作用が無く ERRORLEVEL に影響する内部コマンドを利用する。 メッセージが出る場合があるので、NUL にリダイレクトする。 cd . → 0 にセット md . 2>NUL → 1 にセット ver >NUL → 0 にセット verify >NUL → 0 にセット verify X 2>NUL → 1 にセット setlocal /? には、verify other で 1 にセットする例がある。 //////////////////////////////////////////////////////////////////////////// *環境変数への改行文字のセット [#i2dc5166] 環境変数へ改行文字をセットすることが出来る。 ただし、参照を % で行うと改行文字の後ろは無視される。 そのため遅延展開を有効にして、! で参照する必要がある。 setlocal enabledelayedexpansion set AAA=ABCDEFG^ [空行] HIJKLMN echo !AAA! → ABCDEFG 改行 HIJKLMN が表示される [空行]と書いた部分は本当の空行にする。 なお、この方法でセットされる改行文字は CRLF ではなくて、LF の1バイトだけである。 部分文字列参照を行う際には改行文字を1文字としてカウントする。 setlocal enabledelayedexpansion set AAA= for /f "delims=" %%A in (filename) do ( set AAA=!AAA!^ [空行] %%A ) echo !AAA! のようにファイルの内容を1つの環境変数にセットすることも出来る。 最初に、「%で参照すると改行以降が切れる」と書いたが、( ) で囲むことで、 改行以降も有効に出来る。 set AAA=echo ABC^ [空行] echo DEF %ABC% → ABC が表示される (%ABC%) → ABC 改行 DEF が表示される //////////////////////////////////////////////////////////////////////////// #navi(全般)