コマンド別解説

setlocalとendlocal(ローカル変数を使う)

>>setlocalのオプション簡易解説へ

目次

 

バッチファイルの変数はすべてグローバル変数のようなもの

通常、バッチファイルで使用する変数はどこからでも同じ場所を参照する「グローバル変数」(のようなもの)です。本当は違うんですが、詳しい人は怒らないで下さい。

以下にサブルーチンを使った変数の有効範囲を確認した例を示します。以下のバッチファイル例(global_hensu.bat)を見てみましょう。

まずは実行結果を見てみましょう(下図)。

set(変数の設定・計算・ユーザーからの入力情報の取得) 変数の中身の確認(グローバル変数)

はじめに、変数には「yahoo」が格納されており、サブルーチン内では「google」、最後も「google」となっています。

では、プログラムに戻って説明します。4行目で変数「hensu」に文字列「yahoo」を代入しています。当然、5行目の変数の中身の確認では、文字列「yahoo」が代入されています。

その後、9行目でサブルーチン内に入り、18行目で変数「hensu」には文字列「google」が代入されるため19行目の出力では「google」となります。そして、メインプログラムに戻ります。

戻った後の変数「hensu」を11行目で確認するとこちらも文字列「google」に変えられています。

このように、どの場所で使おうと変数名が同じであれば同じ変数として扱われます。そのため、メインに戻った後の変数「hensu」には「google」が代入されていました。

 

ローカル変数を使用する

ローカル変数を利用するには、「setlocal」と「endlocal」コマンドを使用します

使用方法はローカル変数を使いたい場所を「setlocal」と「endlocal」で囲みます

 

実際に使ってみましょう。前節のバッチプログラムを編集して、サブルーチン内の変数「hensu」をローカル変数にします。

以下、そのバッチファイル(local_hensu.bat)です。

前節のバッチファイルのサブルーチン内を「setlocal」と「endlocal」コマンドで囲っただけです(18行目と26行目)。

以下、実行結果です。

set(変数の設定・計算・ユーザーからの入力情報の取得) サブルーチン内でローカル変数の使用

最後の「メインプログラムの最後=」の出力に注目して下さい。文字列「yahoo」のままとなっています。今度は、メインプログラムの「hensu」の中身は置き換えられていません

これは、「setlocal」と「endlocal」コマンドで囲った部分で使用した変数は、その外側との変数とは別物として扱われたからです。

 

「setlocal」と「endlocal」は特にサブルーチン内だけに使えるものではなく、どこでも使えます。

上記のプログラムをサブルーチンを書かず以下のように書きます。

このようにしても、やはり「setlocal」と「endlocal」に囲まれた部分(10行目と18行目)の変数は違いうものとして扱われ、外の変数には影響を及ぼしません。

以下、実行結果です。

set(変数の設定・計算・ユーザーからの入力情報の取得) ローカル変数の使用例(その2)

「setlocal」「endlocal」の外側で変数「hensu」に代入した中身(「yahoo」)は変化していません。

Windowsバッチファイル初心者へ向けた入門書を作成しました


Windowsバッチファイル初心者の方へ向けた入門書(PDF)を作成しました。


・初めてWindowsバッチファイルを勉強してみようと思っている方

・使ったことはあるが一から基礎を学び直したい方


へ向けて丁寧な解説を行っています。


「全くプログラムを知らない方でも、この入門書を読んだ後には、Windowsバッチファイルの中級者レベルになれるように」をコンセプトに執筆したものです。


この本を読めば、バッチファイルを使ったファイルやフォルダの操作に関しては一通りのことができるようになります。そうなればもう十分中級者と呼べるレベルですので、あとは自分のやりたいことを実現しようとする中で徐々に知識を蓄えていくだけですぐに上級者へなれるでしょう。


詳しくみる

関連ページ

コメント

コメントを残す