【Batch】バッチ ~ 基本編 / 制御文 ~

■ はじめに

バッチの基本をメモっておく。

目次

【1】条件分岐
 1)IF文
 [補足] 遅延環境変数
【2】繰り返し
 1)GO TO文
 2)FOR 文
【3】サブルーチン
 1)CALL文

【1】条件分岐

1)IF文

構文

if "【文字列1】"=="【文字列2】" 【コマンド】

if "【文字列1】"=="【文字列2】" (
【コマンド1】
) else  (
【コマンド2】
)

if "【文字列1】"=="【文字列2】" (
【コマンド1】
) else if "【文字列3】"=="【文字列4】" (
【コマンド2】
) else {
【コマンド3】
)

サンプル

@echo off
set /p NUM="[1]を押せば「Hello!」[2]を押せば「How are you?」それ以外は「Good bye...」"

if "%NUM%"=="1"
  echo "Hello!"
if "%NUM%"=="2"
(
  echo "How are you?"
)
else
(
  echo "Good bye."
)

REM 一時停止
pause

サンプル

@ECHO OFF

SET JDK_TEMP=%JAVA_HOME%
if not exist "%JDK_TEMP%" (
   REM Use Default JDK
   SET JDK_TEMP=C:\Program Files\Java\jdk1.8.0
)

echo JDK_TEMP : %JDK_TEMP%
SET JDK_TEMP=

echo Done

[補足] 遅延環境変数

* if/for文の中で値を変更したい場合、
 if/for文全体を「setlocal EnableDelayedExpansion」と
 「endlocal」で挟む必要がある
* if/for文内で使用する変数は「%」ではなく「!」で囲む
* 詳細は、以下の関連記事の「【7】遅延環境変数」を参照のこと

https://dk521123.hatenablog.com/entry/2010/11/23/165433

【2】繰り返し

1)GO TO文

* 行頭に「:」(コロン)を書き込み、
 【ラベル名】を書き込むと、Go to後に、そこに移動する

 構文

goto 【ラベル名】

:【ラベル名】
    サンプル
@echo off

goto jump

echo ここは表示されない

:jump
echo ここだけ表示する

REM 一時停止
pause

 2)FOR 文

 構文

for /L %【変数】 in (【開始】,【増分】,【終了】) do 【コマンド】

or

for /L %【変数】 in (【開始】,【増分】,【終了】) do (
【コマンド】
)

 サンプル

for /L %i in (1,1,10) do echo %i

参考資料
http://www.ne.jp/asahi/hishidama/home/tech/windows/bat.html#foreach

 【3】サブルーチン

1)CALL文

参考資料
http://d.hatena.ne.jp/iroiro123/20121223/1356230875
http://rtaki.sakura.ne.jp/infra/?p=330
http://k-hiura.cocolog-nifty.com/blog/2009/10/windows-2320.html#for

関連記事

バッチ ~入門編 ~
https://dk521123.hatenablog.com/entry/2010/07/06/223905
バッチ ~ 基本編 / 変数の扱い ~
https://dk521123.hatenablog.com/entry/2010/11/23/165433
バッチ ~ 基本編 / コピー&削除 ~
https://dk521123.hatenablog.com/entry/2010/11/22/230218
バッチ ~ 基本編 / ファイル・ディレクトリの扱い ~
https://dk521123.hatenablog.com/entry/2010/11/23/164811
バッチ ~ 基本編 / リダイレクション ~
https://dk521123.hatenablog.com/entry/2015/03/16/232627
バッチ ~ タイマー起動 ~
https://dk521123.hatenablog.com/entry/2010/11/24/172455
バッチで簡易テストデータを作ることを考える
https://dk521123.hatenablog.com/entry/2021/04/24/182143