Help us understand the problem. What is going on with this article?

バッチファイルでif文をトラブルなく使う

More than 5 years have passed since last update.

バッチファイルでif文を使っていてハマったので、ハマらないための書き方と注意点をまとめてみた

解決方法

何も考えず必ず以下の形で書く。

if 条件 (                ←(1)
  call :サブルーチン名 引数 ←(2)
) else if 条件 (          ←(3)
  call :サブルーチン名 引数
) else (                 ←(4)
  call :サブルーチン名 引数
)                        ←(5)

以下説明

(1)条件文
  末尾の'('はこの行の行末に書く。その後ろに継続して記述しない。
  この行にコマンド書くとろくな事にならない。
  悪い例:

if "%FOO%"=="1" ( set VAR=2 )

  は %VAR% に "2 "(後ろに余計なスペースあり) を代入する

if "%FOO%"=="1" (
  set VAR=2
)

  なら問題ない

(2)実行文は書かず極力サブルーチンを呼び出す
  ※ifの()の中で色々と記述すると大抵不幸になる。
   代わりにサブルーチンを呼び出す。
  ※ifの()の中で変数代入しても、新しい値が有効になるのは()から出た後。
  悪い例:

set AAA=
set BBB=0
if "1"=="1" (
  set AAA=10
  set /a BBB=AAA+20
)
echo %BBB%

  上記の例は、期待した値30ではなく値20を出力する。

(3)else if文
  省略可能。まぁ、当たり前。

(4)else文
  必ず行頭から") else ("とし、直ぐに改行。
  ※elseの前後にスペースが必要

(5)末尾の')'
  必ず行頭から")"とし、直ぐに改行。
  悪い例:

if "1"=="1" (
  set AAA=10 )

  上記の例では、%AAA%に"10 "が入る。(末尾に余計なスペースあり)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした