こんにちは!よりWindowsを便利に使うために今回はバッチファイルの作成方法第2弾をご紹介します。これを使えるようになると1歩だけインフラエンジニアに近づけます。前回の記事はこちら
前回、紹介した記事は下記の6種類です。今回はさらに応用して色々できるようにしていきます。
- @echo off …コマンドの画面表示を消す
- color …コマンドプロンプトの色を指定
- rem …バッチファイルのコードコメント(処理に影響しない)
- echo …画面に表示させる文字列
- hostname …コンピュータ名を表示する(Windowsコマンド)
- pause …処理を一時停止する
目次
はじめてのバッチファイル作り方② かんたん解説
さっそくですが、今回は新たに4種類のバッチファイルコマンドをご紹介します。
gotoコマンド
バッチファイルは記述した順番に1行ずつバッチ処理をしていきます。gotoコマンドは処理をジャンプしてバッチ処理を行なうことが出来ます。
バッチファイルで gotoコマンドを使用すると、バッチファイル内の指定したラベルにジャンプすることができます。以下に gotoコマンドの使い方の基本的な構文と注意点を説明します。
ラベル名は例としてstep1とします。
@echo off
:step1
echo はじめてのバッチファイル
pause
goto step1
上記の例では、はじめに :ラベル名の形式で宣言され、その下に実行したいコマンドを記述することができます。echo はじめてのバッチファイル で表示した後、pauseで処理の一時停止をしています。その後 gotoコマンドを使用して指定したラベルにジャンプすることができます。
gotoコマンドを使用する際の注意点としては、以下の点が挙げられます。
以上が基本的なgotoコマンドの使い方です。ラベルとジャンプ先のラベルの組み合わせにより、バッチファイル内での制御フローを調整することができます。
callコマンド
バッチファイル処理を他のスクリプトやバッチファイルを呼び出すことの出来るのがcallコマンドです。バッチファイルでcallコマンドを使用すると、別のバッチファイルを呼び出すことができます。
callコマンドを使用すると、呼び出されたバッチファイルでサブルーチンが実行され、実行が終了した後に元のバッチファイルに戻ります。別のバッチファイル処理を行なうことが出来るのでサブスクリプトとして用意することが出来ます。
以下に callコマンドの使い方の基本的な構文と注意点を説明します。
@echo off
rem バッチファイルのコード
echo
echo こんにちは
rem 別のバッチファイルを呼び出す場合の例
call test.bat
echo 処理完了です。
pause
上記の例では、callコマンドを使用して別のバッチファイル(test.bat)を呼び出しています。呼び出すバッチファイル名はcallコマンドの後に指定します。
callコマンドを使用する際の注意点としては下記になります。
set /p コマンド
set /pコマンドはユーザーの入力を受け付けることの出来る対話式のコマンドです。数値を選択して欲しいときなどにset /pコマンドを使います。以下にset /pコマンドの基本的な使い方を示します。
@echo off
set /p inp=入力:
echo 入力した文字: %inp%
上記のスクリプトでは、set /pコマンドを使用してユーザーからの入力をinp変数に格納しています。入力:は、ユーザーに表示されるメッセージです。
echo 入力した文字: %inp%は、ユーザーが入力した値を表示しています。%inp%は、inp変数の値を参照しています。
実行するとスクリプトはプロンプトメッセージを表示し、ユーザーはキーボードから入力を行うことができます。入力された値は、inp変数に格納され、その後の処理で使用することができます。
set /pコマンドを使ってユーザーからの入力を受け取ることで、バッチファイルを対話的に動作させたり、動的な値を取得したりすることができます。
ifコマンド
バッチファイル内でifコマンドを使用すると、条件に基づいて特定の処理を実行することができます。ifコマンドの基本的な使い方を示します。
@echo off
set X=10
if %X%==10 (
echo X は10です。
) else (
echo X は10ではないです。
)
上記のスクリプトでは、ifコマンドを使用してX変数が10と等しいかどうかを判定しています。==は等号を表し、()で囲まれた部分が条件が真の場合に実行されるコードブロックです。elseブロックは、条件が偽の場合に実行されます。
ifコマンドでは、数値や文字列の比較が出来ます。他に一般的な比較演算子を示します。
- EQU: 等しい
- NEQ: 等しくない
- LSS: より小さい
- LEQ: 以下(以下または等しい)
- GTR: より大きい
- GEQ: 以上(以上または等しい)
また、ifコマンドはさまざまな条件を組み合わせることもできます。論理演算子 &&(AND)、||(OR)、not(NOT)を使用して条件を組み合わせることができます。
@echo off
set aaa=10
set bbb=20
if %aaa%==10 && not %bbb%==30 (
echo aaaは10です。かつ、bbbは30ではありません。
) else (
echo 条件にあてはまりません。
)
上記の例では、aaaが10であり、かつbbbが30でない場合に、条件が真となります。
ifコマンドを使用することでバッチファイル内で条件に基づいた処理を行うことができます。
バッチファイル作り方② まとめ 応用編
上記のコマンドを複数使い応用したバッチファイルが下記になります。このバッチファイルは主にgotoコマンド、ifコマンド、set /pコマンド、echoコマンドで構成しています。下記の処理でバッチファイルを構成しています。
- echo でメニューを表示
- set /p で数値を選択
- ifコマンドの条件分岐
- gotoコマンドでラベルにジャンプ
- 処理が終わったら一番最初のラベルにジャンプ
@echo off
:Menu
cls
echo ————————————
echo □ Menu □
echo ————————————
echo 1:ラベル1
echo 2:ラベル2
echo 3:ラベル3
echo q:終了
echo ————————————
rem
rem 判定キーの初期化
set Slt=nul
rem 選択値の入力を求める
set /p Slt=メニューから選択し数値を入力:
rem
rem 条件分岐
if ‘%Slt%’==’1’ goto Set_1
if ‘%Slt%’==’2’ goto Set_2
if ‘%Slt%’==’3’ goto Set_3
if ‘%Slt%’==’q’ goto :eof
rem
rem 指定文字以外の入力がある場合はメニューに戻る
goto Menu
rem
:Set_1
rem —————————————————
rem ■ラベル1
rem —————————————————
echo ラベル1にジャンプしました。
pause
rem 処理終了
rem
goto :Menu
rem
:Set_2
rem —————————————————
rem ■ラベル2
rem —————————————————
echo ラベル2にジャンプしました。
pause
rem 処理終了
goto :Menu
rem
:Set_3
rem —————————————————
rem ■ラベル3
rem —————————————————
echo ラベル3にジャンプしました。
pause
rem 処理終了
goto :Menu
rem
rem 処理終了
goto :eof
バッチファイル作成の鍵は目的の明確化と効率的な処理になります。エラー処理や再利用可能なコードの作成も利用していきましょう。remコマンドでコメントを追加して可読性を高めてメンテナンスのしやすいバッチファイルを作成しましょう。
バッチファイルを作成した場合はテストを実施し、バッチファイルの予期しない動作やエラーを排除しましょう。それではー!
良ければ過去記事も見てみてください↓