2010年12月9日木曜日

【困ったときのwindowsコマンド】IF文によるnull判断

バッチファイルで変数に入っている値によって処理を分けたいときIF文を使う。
ただ、変数を使った場合変数がnull(0文字の文字列)の可能性がある場合注意が必要になる。



SET /P para==Hello>>

IF %para%==Hello DO ECHO "How are you?"

pause


上のソースの場合、「こんにちは>>」に対してこんにちはを入力してEnterを押すと
ごきげんいかがですか?が表示され、それ以外の文字列が入力されていれば何も表示されずにpuse処理まで進む。
しかし、何も入力せずにEnterを押されると、構文エラーで落ちる。

なぜかというと以下のような処理になるから


SET /P para=
IF ==Hello DO ECHO "How are you?"

pause

変数の中身がnullやと、IFの比較条件の片方がないということになってしまうらしい。
これでは、逆にnullの場合は~という処理が書けない事になる。

解決方法は以下の通り


SET /P para=Hello>>

IF %para%_A==Hello_A DO ECHO "How are you?"

pause

IFの比較条件の両方に_Aなどの関係ない文字列を付加する。これによって、変数がnullでも

SET /P para=Hello>>

IF _A==Hello_A DO ECHO "How are you?"

pause

となって処理は正常に進むこととなる。
※もちろん変数にHelloが入っていればHello_A==Hello_Aで"How are you?"が表示される。


はまったなぁ・・・

0 件のコメント:

コメントを投稿