■ はじめに
【1】バッチファイルに引数を渡す 【2】値の設定 【3】値の参照 【4】値の計算 【5】ユーザからの入力値を変数に設定 【6】文字列 【7】遅延環境変数
【1】バッチファイルに引数を渡す
引数 | 説明 |
---|---|
%0 | {バッチファイル名を表す |
%1~%9 | 1番目の引数から9番目の引数 を表す |
%* | 全ての引数 を表す |
サンプル
* 以下を、ファイル名「sample.cmd」で保存し、 コマンドプロンプトで「sample a b c d」と入力し、バッチを実行する
sample.cmd
@echo off echo バッチファイル名 : %0 echo 1番目の引数 : %1 echo 3番目の引数 : %3 echo すべての引数 : %* pause
【2】値の設定
構文
SET 【変数】=【設定値】
サンプル
SET JAVA_HOME=C:\Program Files\Java\jdk1.8.0
【3】値の参照
* 設定した値を使用したい場合は『%変数%』で 変数名の前後に『%』を付ける
構文
%【変数】%
サンプル
echo JAVA_HOME : %JAVA_HOME%
補足:環境変数について
* 環境変数も『%変数%』で参照できる(使用例:%JAVA_HOME%)
【4】値の計算
構文
set /a 【変数名】=【演算式】
サンプル
set /a ans=1+1
【5】ユーザからの入力値を変数に設定
構文
SET /p 【変数】="【メッセージ】"
サンプル
set /p data="input data, please : " @echo off set /p data="input data, please : " echo あなたの入力値は、%data%ですよね? pause
【6】文字列
サンプル
@echo off REM 結合 SET value1=Hello SET value2= World! SET result=%value1%%value2% echo Reult : %result% pause
【7】遅延環境変数
if/forブロック内で変数を変更した場合、更新されない
更新されない例
@echo off set counter=1 if %counter% == 1 ( REM +1する set /a counter+=1 REM 「2」を期待するが「1」 echo %counter% ) pause
setlocal EnableDelayedExpansion
* cf. expansion = 拡張, 展開 * for文の中で値を変更したい場合、 for文全体を「setlocal EnableDelayedExpansion」と 「endlocal」で挟む必要がある => 遅延環境変数を有効にする * for文内で使用する変数は「%」ではなく「!」で囲む
更新できる例
@echo off set counter=1 REM 遅延環境変数を有効にする setlocal EnableDelayedExpansion if !counter! == 1 ( REM +1する set /a counter+=1 REM 「2」 echo !counter! ) endlocal pause
参考文献
https://qiita.com/plcherrim/items/c7c477cacf8c97792e17
https://jj-blues.com/cms/wantto-changevalueinfor/
参考資料
http://capm-network.com/?tag=Windows%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E5%A4%89%E6%95%B0
http://www.atmarkit.co.jp/fwin2k/win2ktips/419batchdate/batchdate.html
関連記事
バッチ ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2010/07/06/223905
バッチで簡易テストデータを作ることを考える
https://dk521123.hatenablog.com/entry/2021/04/24/182143