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
関連ページ
- Windowsバッチファイル - 作成と実行
- Windowsバッチファイル - 引数
- Windowsバッチファイル - 特殊な文法
- Windowsバッチファイル - 変数
- Windowsバッチファイル - 演算子
- Windowsバッチファイル - 制御構文
- Windowsバッチファイル - 外部ファイルの読み書き
- Windowsバッチファイル - 実行結果の取得