82
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-07-16

バッチファイルで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 "が入る。(末尾に余計なスペースあり)

82
81
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
82
81

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?