ローカル変数を設定する(setlocal,endlocal

ローカル変数とは、その間だけで活用できる変数です。ローカル変数を設定するときは「setlocal」で始めり、「endlocal」を終わりに記載します。

今回の解説で使用するコード

ここでの解説は下記のコードを使用します。コードがわからない人は解説ページがリンクしてあります。

・set  引数を定義

echo コマンドスクリプトに内容を表示する

goto ラベルに移動する

call サブルーチンを起動する

ローカル変数の使い方

まず下記のコードで通常時の変数を見てみましょう。この変数は見てのとおり、4行目のsetで変数を変更されています。

コード(ex1.bat)

@echo off

set 変数1=初めの変数

echo 始めの変数=%変数1%

set 変数1=2回目の変数

echo ローカル変数=%変数1%

echo 最後の変数=%変数1%

コマンドスクリプトの結果はこちら。当たり前ですが、最後の変数は2回目の変数となっています。

次にローカル変数を使います。変数を区切る範囲の初めに「setlocal」、終わりに「endlocal」を記載します。今回は下記のコードのとおり、2回目の変数を設定するときにローカル変数を設定します。

コード(ex2.bat)

@echo off

set 変数1=初めの変数

echo 始めの変数=%変数1%

setlocal

set 変数1=2回目の変数

echo ローカル変数=%変数1%

endlocal

echo 最後の変数=%変数1%

コマンドスクリプトの結果はこちら。最後の変数が初めの変数になってますね。このとおり、ローカル変数を設定すると、ローカル変数内で変数の設定がされ、それ以外には影響されません。

変数は下記の色分けの通り、赤字の範囲で完結しており、最後の変数は青字の初めの変数で設定されます。

サブルーチン内でローカル変数を使用する

サブルーチンとは、プログラムの1つの塊のようなものです。サブルーチンを作ることでコード量を少なくできる点や記述ミスを減らせることがメリットです。

実際にローカル変数を使ってサブルーチンを設定します。

まず悪い例です。始めにローカル変数を作らないで、サブルーチンを作ってみます。

コード(例1.bat)

@echo off

set 変数1=初めの変数

echo 始めの変数=%変数1%

call :subru

echo 最後の変数=%変数1%

goto :eof

:subru

set 変数1=2回目の変数

echo サブの中の変数=%変数1%

exit/b

これをコマンドスクリプトで表示すると、サブの中の変数で変化して、そのまま最後の変数にも反映されています。

サブルーチンは下記の赤枠ですが、call :subruで呼び出しています。

サブルーチンで処理した後に最後の変数が呼び出されます。

ローカル変数を設定していないので、最後の変数はサブルーチン内の2回目の変数となります。

そこでローカル変数を設定することで、解決できます。赤字の「setlocal」と「endlocal」を設定します。

コード(例2.bat)

@echo off

set 変数1=初めの変数

echo 始めの変数=%変数1%

call :subru

echo 最後の変数=%変数1%

goto :eof

:subru

setlocal

set 変数1=2回目の変数

echo サブの中の変数=%変数1%

endlocal

exit/b

コマンドスクリプトの結果はこちら。最後の変数が始めの変数になりました。

下記のとおり、「setlocal」と「endlocal」内で変数が完結しているので、最後の変数は始めの変数となります。

コメント

タイトルとURLをコピーしました