おはようございます。くろねこです。
「バッチ特集」の第7回
今回のテーマは 環境変数 です。
それでは早速行ってみましょう!
【ご注意】
本サイトを参考に作成したものは、自己責任でお願いします。
実行前のレビューやテストを必ず実施してください。
それでは、今回もよろしくお願いします。
環境変数の利用
目的
環境変数は簡単に言うとバッチの中で扱う変数と考えて問題ありません。
(一般的なプログラム言語で使用する変数みたいなもの)
ユーザが設定する環境変数は「ユーザ環境変数」と呼ばれます。
システム起動時に設定される環境変数もあります。
具体的には、"PATH" や "TEMP" などがそれに該当します。
こちらは、「システム環境変数」と呼ばれます。
環境変数の設定は SETコマンドを使用します。
SETコマンド 記述方法
SET 環境変数名=[値]
( [ ]部分は省略可能 )
SETコマンドは、バッチファイル内に記述もでき、コマンドプロンプトで直接入力するコマンドとしても使用できます。
環境変数の参照方法
環境変数名を"%"で囲んで記述することで、バッチ実行時にその %環境変数名% 部分が設定されている値に置き換わります。
(eg) 環境変数名が"@AAA"の場合、%@AAA% で参照できます。以下は環境編の内容を表示するサンプルです。
echo %@AAA%
解説【講釈】
◆ SETコマンドで値を指定した場合
左辺の環境変数に右辺の値が設定されます。
環境変数が新規の場合は新たに環境変数を用意し値が設定され、
既存の場合は値が指定した内容に変更されます。
◆ SETコマンドで右辺の値を省略した場合
左辺の環境変数は削除されます。
環境変数のスコープ
環境変数のスコープとは、設定した環境変数の有効範囲のことです。
ここでは、Windows7以降のWindows環境を前提に説明します。
環境変数を作成したコマンドプロンプトの中で、環境変数を削除まで有効になります。
(別ウィンドウのコマンドプロンプトは範囲外となります。)
環境変数のスコープがどうなっているかサンプルコードを使って説明します。
サンプル(1)
2つのバッチファイル(a.batとb.bat)を作成します。
@echo off cd /d %~dp0 set @test=環境変数 echo *** a.bat ***************** echo @test : %@test% echo ***************************
このサンプルコードを適当なフォルダに、a.bat というファイル名で保存してください。もちろん、文字コードはANSIです。
@echo off cd /d %~dp0 echo *** b.bat ***************** echo @test : %@test% echo ***************************
このサンプルコードをa.batを保存したフォルダに、b.bat というファイル名で保存してください。もちろん、文字コードはANSIです。
作成したサンプルを実行してみます。
【解説】
① a.batを実行することで、環境変数"@test"に値が設定されます。
② b.batを実行します。b.batでは環境変数"@test"の内容を表示します。
③ setコマンドで環境変数"@test"の内容を直接確認します。
④ 環境変数"@test"の内容をクリアします。(環境変数の削除)
⑤ 環境変数"@test"の内容をb.batで表示してみます。
サンプル(2)
2つのバッチファイル(c.batとd.bat)を作成します。
@echo off cd /d %~dp0 set @test=環境変数 echo *** c.bat ***************** echo @test : %@test% echo *************************** cmd /c .\d.bat
このサンプルコードを適当なフォルダに、c.bat というファイル名で保存してください。もちろん、文字コードはANSIです。
@echo off cd /d %~dp0 echo *** d.bat ***************** echo @test : %@test% echo ***************************
このサンプルコードをc.batを保存したフォルダに、d.bat というファイル名で保存してください。もちろん、文字コードはANSIです。
作成したサンプルを実行してみます。
【解説】
① c.batを実行することで、環境変数"@test"に値が設定されます。
c.batから呼び出されたd.batで環境変数"@test"の内容を表示します。
② setコマンドで環境変数"@test"の内容を直接確認します。
③ 環境変数"@test"の内容をクリアします。(環境変数の削除)
④ 環境変数"@test"の内容をb.batで表示してみます。
サンプル(2)は、環境変数を作成したコマンドプロンプトから起動したコマンドプロンプト(チャイルドプロセス)で環境変数の内容が引き継がれることが確認できます。
知ってると便利な環境変数
Windowsを起動した際にあらかじめ設定されている環境変数のうち、バッチ作成のうえで便利なものをいくつか紹介します。
・ COMPUTERNAME : マシン名
・ USERNAME : ユーザ名
・ USERPROFILE : ユーザプロファイルフォルダ (C:\Users\【ユーザ名】
・ USERDOMAIN : ログオンしているドメイン名 (【ドメイン名】)
・ TEMP : TEMPフォルダのパス (%USERPROFILE%\AppData\Local\Temp)
・ TMP : TEMPフォルダのパス (%USERPROFILE%\AppData\Local\Temp)
・ windir : Windowsがインストールされているパス (%SystemRoot%)
・ OS : OS名称 (Windows_NT)
このほかにもたくさんの環境変数が設定されています。確認するには、コマンドプロンプトを開き、引数なしでSETコマンドを実行してみてください。
余談 (スキップOK)
上記の説明の中で、環境変数 OS というのがありました。
設定されている値は、"Windows_NT" です。
はて、この「NT」って何だよ?
と思われる方はかなり多いのではと思います。
昔々、そのまた大昔
Windowsは2種類ありました。
ひとつは、MS-DOS上で動くGUIアプリケーションです。Windows1.0から始まり、日本で普及したのはWindows3.1です。
その後、Windows95(Windows4.0)で一気にブレイクしました。このとき、PCの起動でWindowsが直接起動するようになりました。
しかし、この系統のWindows(以降、Windows9x系)は、MS-DOSを拡張・発展してきたものであり、基本的にはシングルユーザ、シングルタスクベースのものでした。
この系統は、1.0(1985年)→2.0→3.0/3.1→95→98/98SE→Me(2000年) で終了しました。
これに対し、マルチタスク、マルチユーザを前提に開発された新しいWindows(New Technology(諸説あり))で、最初のバージョンは Windows NT Advanced Server 3.1 でサーバ向けOSでした。
その後、クライアント向けエディションを追加した Windows NT 3.5が登場、Windows95とUIを共通化したWidnows NT 4.0と進化します。
こちらの系統(NT系)のサーバ系は、NT3.1→NT3.5/3.51→NT4.0→2000→2003/2003R2→2008/2008R2→2012/2012R2→2016→2019→2022 と進化し続けています。
クライアント系は、NT3.5/3.51→NT4.0→2000→XP→Vista→7→8/8.1→10→11と進化しています。
このような流れで来ていますが、コンシューマ向けで普及した流れは
Widnows95 → Windows98 → WindowsXP → Windows7 → Windows10 ではないでしょうか。ユーザは知らないうちにXPからNT系のWindowsに変わっていたのです。
途中飛んでいるのは所謂「不評」だったWindowsです。Widnows11はどうなんでしょうね。。。
ちなみにくろねこは、Windows3.0/3.1とそれ以降の9x系、そしてNT系はNT3.1から様々な開発をやってきました。
今でこそ高性能なプロセッサの登場でいろいろなことができるようになりましたが、当時 NT3.1 を動かす環境を準備するには莫大な費用と高度な設定技術が必要でした。
懐かしいです。
「Config職人」と呼ばれるエンジニアがいたり。。。
まあ、この話題は非常に長くなるので別の機会に触れたいと思います。
おわりに
これまで7回にわたり「バッチ特集」を投稿させていただきましたが、いかがでしたでしょうか?
基本的な部分はお伝えしてきたつもりです。
もし、掲載内容についてのご指摘等ありましたら、コメントをお願いします。
これまで、「バッチ特集」はだいたい3週間サイクルで投稿してきましたが、今後は不定期とさせていただきます。
バッチ特集・ソフトウェアに関する他の記事をご覧いただくには下記をクリックしてください。