Windowsバッチファイル特殊な文法

バッチファイル内で改行する。

バッチファイルで長い一行のコマンドを複数行に分けて記述する場合には、「^」文字を用います。

「^」はコマンドプロンプトにおける入力の続きという意味を持ちます。


@echo off

"c:¥root¥bin¥nt_show.exe" ^
   %HOSTNAME% %PORT% %USERNAME% %PASSWORD%
if not %ERRORLEVEL% == 0 (
  echo ERROR: Failed to connect: %USERNAME%@%HOSTNAME%:%PROXY%
  exit /b 1
)
exit /b 0

バッチファイルで1行に複数の処理を記述する。

バッチファイルで複数行の処理を一行で記述するには、「&」文字を用います。

コマンドを左から順番に実行します。


echo success! & TIMEOUT /T 5 /NOBREAK & exit /b 0

バッチファイルでif文のAND条件を実現する。

バッチファイルにおけるif条件分岐処理では、ANDやORなどの条件指定はできません。

ただし、AND条件は下記の工夫を用いることで実現することができます。


REM 分岐判断
if "%1" == "0" if "%2" == "0" exit /b 1
if "%1" == "0" if "%2" == "1" exit /b 2
if "%1" == "1" if "%2" == "0" exit /b 3
if "%1" == "1" if "%2" == "1" exit /b 4
exit /b 255

バッチファイルでyes/noの入力待ち

環境変数への入力待ちを使うことで、入力文字の判定処理を実現できます。


@echo off

setlocal
set /p answer="実行しますか(y/n)?  : %answer%"
if "%answer%"=="y" (
  echo "start"
) else if "%answer%"=="n" ( 
  echo "cancel"
  exit /b 1
)else (
  echo "other key"
  exit /b 1
)
endlocal

REM y入力後の処理...

バッチファイルで関数を実現する。

バッチファイルではスクリプト言語のように関数を定義することができません。

そこで、ラベルとcall文を用いて関数的な構造化を実現する方法があります。


「call :ラベル名」を実行すると、ラベルにジャンプします。

ラベルから本処理に戻る場合には「exit /b」を実行します。


@echo off

REM コマンド引数を格納する
set SUB_CMD=%1

REM サブコマンドの実行
if "%SUB_CMD%" == "enable" (
  call :ENABLE_PROCESS
  if not "!ERRORLEVEL!" == "0" (goto ERROR_EXIT)
) else if "%SUB_CMD%" == "desable" (
  call :DESABLE_PROCESS
  if not "!ERRORLEVEL!" == "0" (goto ERROR_EXIT)
) else (
  call :SHOW_USAGE
  goto ERROR_EXIT
)

echo SUCCESS: %SUB_CMD%
endlocal
exit /b 0

:ERROR_EXIT
echo ERROR: %SUB_CMD%
endlocal
exit /b 1 

REM ===== 以下は関数定義 =====

REM !
REM @brief  コマンド使用法を表示する。
REM 
:SHOW_USAGE
  echo USAGE: %0 [enable or desable]
  exit /b 1

REM !
REM @brief  有効化する
REM 
:ENABLE_PROCESS
  enable_process_cmd
  if "%ERRORLEVEL%" == "0" (
    echo ERROR: failed to enable.
    exit /b 1
  )

  exit /b 0

REM !
REM @brief  無効化する
REM 
:DESABLE_PROCESS
  desable_process_cmd
  if "%ERRORLEVEL%" == "0" (
    echo ERROR: failed to desable.
    exit /b 1
  )

  exit /b 0


関連ページ