#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>" ////////////////////////////////////////////////////////////////////////////