- 追加された行はこの色です。
- 削除された行はこの色です。
#contents
////////////////////////////////////////////////////////////////////////////
*set /a リーディングゼロの対処 [#d522de6d]
set /a の算術式の中で、0010 のようにゼロで始まる値は8進数値とみなされるので十でなく八となる。また、08 は不正な8進数としてエラーになる。
-桁数固定の場合
set A=08
set B=0010
set /a A=1%A%-100
set /a B=1%B%-10000
-リーディングゼロの有無が不明の場合
set A=「10000未満の数字でリーディングゼロの有無は不明」
set /a A=1000%A% %% 10000
////////////////////////////////////////////////////////////////////////////
*set /p 入力結果の確認 [#if59e8dd]
空入力の時、変数には空がセットされる(未定義になる)のではなく、前の状態のまま不変である。おそらく、
set ANSWER=Y
set /p ANSWER=Enter(Y/N) [Y]?
のようにデフォルト値の設定を想定した機能であろう。空入力に対して空の結果を得たい場合は、
set ANSWER=
set /p ANSWER=Enter Name:
のようにあらかじめ未定義にしておく必要がある。
ERRORLEVELは、空入力の時に1になる。しかし、空以外の入力の時には0となるわけではなく、その前の値のまま不変である。
従って、空入力の判断にERRORLEVELを使うためには、あらかじめERRORLEVELを0にしておく必要があり、あまり実用的でない。
cd . % ERRORLEVEL を 0 にセットする%
set /p VAR=Enter:
if ERRORLEVEL 1 echo 空入力だった
set VAR=
set /p VAR=Enter:
if not defined VAR echo 空入力だった
後者のほうがわかりやすい。
////////////////////////////////////////////////////////////////////////////
*set /p による改行なしの文字列表示 [#ccf34f3c]
set /p のプロンプト文字列表示機能を使って、echo と違って改行付加なしで文字列を表示させることが出来る。
set /p DMY=abcdefg<NUL
また、変数の値はどうせ使わないので変数名は省略してもかまわない。プロンプト文字列を" "で囲んだ場合は" "をはずして表示される。
set /p <NUL="abcdefg>"
////////////////////////////////////////////////////////////////////////////
*文末の空白 [#faa0faa6]
set を & を使ってマルチステートメントで記述する際、
set A=abc & set B=def
のように & の前に空白を置くと、Aには abc ではなく、abc空白 がセットされる。
これを避けるためには、
set A=abc& set B=def
のように & の前に空白を置いてはいけない。または、" " で囲んで、
set "A=abc" & set "B=def"
ならば空白は含まない文字列がセットされる。
& だけでなく、) や && 、|| の前も同じ。
////////////////////////////////////////////////////////////////////////////
*set "VAR=%A%" [#d6827095]
環境変数Aの値に < > & | 等の特殊文字を含む場合は、
set VAR=%A%
では、値をセットできない。特殊文字を含んでいても " を含んでいなければ、
set "VAR=%A%"
と、全体を " " で囲むことで安全に値をセットできる。前項も参照。
////////////////////////////////////////////////////////////////////////////