せっかくなので、バッチファイルについて、もう少し。
正直、今更な話だけど、案外探すのが面倒なので、とりあえず自分用にここへ。
対話形式でなにかやろうとすると、コマンドプロンプト/MS-DOSって、どーしてもSETコマンドに頼らざるを得ない。
そんなときは
@ECHO OFF
SET /P TESTMSG=ここに何か入力してください。:
ECHO %TESTMSG%
として、バッチファイルを実行すると…
C:\>test.bat
ここになにか入力してください。:
で入力待ちになるので、なにか入力してエンターを押すと、入力された文字列がTESTMSGに格納される。
ECHOでそのTESTMSGを表示しておしまし。
C:\>test.bat
ここになにか入力してください。:テストメッセージ
テストメッセージ
C:\>
この場合、事前にTESTMSGになにかセットしておいても、入力で上書きされる。ただし何も入力をしないで、エンターを押すと、なにも格納されない。
なので、
@ECHO OFF
SET /P ANSWER=よろしいですか?[Y/N]:
IF /I %ANSWER% EQU Y (
ECHO 了解いたしました。
)
とかやると、何も入力しない場合にはANSWERは空のまま。IF文でエラーになってしまう。
C:\>test.bat
よろしいですか?[Y/N]:
Yの使い方が誤っています
C:\>
対策するなら、「"」で括るか、
@ECHO OFF
SET /P ANSWER=よろしいですか?[Y/N]:
IF /I "%ANSWER%" EQU "Y" (
ECHO 了解いたしました。
)
あらかじめ、なにか値を入れておくしかないのかな?(ここではデフォルトでNを入れてみた)
@ECHO OFF
SET ANSWER=N
SET /P ANSWER=よろしいですか?[Y/N]:
IF /I %ANSWER% EQU Y (
ECHO 了解いたしました。
)
こうやってSET /Pだとその値を変更/更新することができるんだけど…
うーん…
こうして書いてみると、なにか忘れてることがある気がしてならん。
あぁ、そうそう、このSETコマンドはやはり環境変数の操作を行うものだから、バッチが終わっても有効なのだな。
なので、処理の最後で
SET 変数名=
で解放するか、処理の最初で初期化(解放と同じ)する必要があるね。さっきの「よろしいですか?[Y/N]」のバッチだと、1回目にYと入力したあとすぐ2回目を実行し、空エンターで再度IF文に入るのだが、1回目に格納したYが未だ入ったままであるため、IF "入力" == "Y"が有効になってしまう。
…まぁ、とりあえずこんなカンジで書いていこうかと思ってる。
備忘録代わりってことでさ。
0 コメント:
::コメントを投稿する::