


Windowsの環境変数が設定されているか確認して、設定されていなければ設定するバッチファイル。
1 2 3 4 5 6 |
if DEFINED ROOM ( echo 環境線数ROOMは%ROOM%に設定されています。 ) else ( setx ROOM Development /M echo 環境線数ROOMを設定しました。 ) |
このif DEFINEDはコマンド拡張機能が有効になっている必要があります。
これは標準で有効になっているので、敢えて無効にしなければ動作すると思います。
コマンド拡張機能が有効/無効は下記の方法で確認できます。
いろいろ調べたけど他に方法がないようでした。
1 2 3 4 |
C:\>reg query "HKLM\Software\Microsoft\Command Processor" /v EnableExtensions HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor EnableExtensions REG_DWORD 0x1 |
0x1が有効、0x0が無効です。
上記バッチファイルを少しだけ改良。
1 2 3 4 5 6 7 8 9 10 11 |
@echo off reg query "HKLM\Software\Microsoft\Command Processor" /v EnableExtensions | findstr 0x1 if %ERRORLEVEL% EQU 0 ( if DEFINED ROOM ( echo 環境線数ROOMは%ROOM%に設定されています。 ) else ( setx ROOM Development /M echo 環境線数ROOMを設定しました。 ) ) pause |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
C:\>if /? バッチ プログラム中で条件処理を実行します。 IF [NOT] ERRORLEVEL 番号 コマンド IF [NOT] 文字列1==文字列2 コマンド IF [NOT] EXIST ファイル名 コマンド NOT 条件が偽の場合にだけ、Windows がコマンドを実行する ことを指定します。 ERRORLEVEL 番号 最後のプログラムの実行で指定された番号以上の終了コード が返されたときに、条件が真になるように指定します。 文字列1==文字列2 テキスト文字列が一致するときに条件が真になるように指定 します。 EXIST ファイル名 指定したファイル名が存在するときに条件が真になるように 指定します。 コマンド 条件が真のときに実行するコマンドを指定します。コマンドに 続けて、ELSE キーワードの後、指定した条件が偽の場合に 実行される ELSE コマンドを指定することができます。 ELSE 節は、IF の後のコマンドと同じ行に置きます。 例: IF EXIST filename. ( del filename. ) ELSE ( echo filename. missing. ) del コマンドは、改行で終了しなければならないため、次の例は、正しく動作し ません: IF EXIST filename. del filename. ELSE echo filename. missing ELSE コマンドは、IF コマンドの終わりと同じ行で始まらなければならないため、 次の例は正しく動作しません: IF EXIST filename. del filename. ELSE echo filename. missing 次の例のように、すべてのコマンドを 1 行にすれば正しく動作します: IF EXIST filename. (del filename.) ELSE echo filename. missing コマンド拡張機能を有効にすると、IF は次のように変更されます: IF [/I] 文字列 1 比較演算子 文字列 2 コマンド IF CMDEXTVERSION 番号 コマンド IF DEFINED 変数 コマンド 比較演算子は、次のいずれかです: EQU - 等しい NEQ - 等しくない LSS - より小さい LEQ - 以下 GTR - より大きい GEQ - 以上 /I スイッチを指定すると、文字列は、大文字と小文字を区別せずに比較されます。 /I スイッチは、IF の文字列 1 == 文字列 2 形式で使うこともできます。 この比較は汎用であり、文字列 1 と文字列 2 が両方とも数字だけを含む場合は、 文字列が数値に変換され、数値の比較が行われます。 CMDEXTVERSION 条件は ERRORLEVEL と同様に動作しますが、コマンド拡張機能 に関連付けられている内部バージョン番号との比較を行います。最初の バージョンは 1 です。 コマンド拡張機能に重要な拡張が追加された場合は、値が 1 大きくなります。 コマンド拡張機能が無効である場合は、CMDEXTVERSION 条件は常に偽です。 DEFINED 条件は EXIST と同様に動作しますが、環境変数名を受け取って、環境 変数が定義されている場合は真を返します。 %ERRORLEVEL% は、ERRORLEVEL の現在の値の文字列表記に展開されます。 ただし、ERRORLEVEL という名前の環境変数が既に定義されている場合は、その 環境変数の値が取得されます。 プログラム実行後、次の例が ERRORLEVEL の使い方を説明しています: goto answer%ERRORLEVEL% :answer0 echo Program had return code 0 :answer1 echo Program had return code 1 また、上の数値比較を使うこともできます: IF %ERRORLEVEL% LEQ 1 goto okay %CMDCMDLINE% は、CMD.EXE が処理する前の、CMD.EXE に渡されたオリジナル のコマンド ラインに展開されます。 ただし、CMDCMDLINE という名前の環境変数が既に定義されている場合は、 その環境変数の値が取得されます。 %CMDEXTVERSION% は、CMDEXTVERSION の現在の値の文字列表記に 展開されます。 ただし、CMDEXTVERSION という名前の環境変数が既に定義されている場合は、 その環境変数の値が取得されます。 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
C:\>setx /? SetX の使用法は 3 とおりあります: 構文 1: SETX [/S システム [/U [ドメイン\]ユーザー [/P [パスワード]]]] 変数 値 [/M] 構文 2: SETX [/S システム [/U [ドメイン\]ユーザー [/P [パスワード]]]] 変数 /K レジストリパス [/M] 構文 3: SETX [/S システム [/U [ドメイン\]ユーザー [/P [パスワード]]]] /F ファイル {変数 {/A x,y | /R x,y 文字列}[/M] | /X} [/D 区切り文字] 説明: ユーザーまたはシステムの環境の中で環境変数を作成または 変更します。引数、レジストリ キー、またはファイル入力を もとに変数を設定することができます。 パラメーター一覧: /S システム 接続先のリモート システムを指定します。 /U [ドメイン\]ユーザー コマンドが実行されるユーザー コンテキストを指定します。 /P [パスワード] 指定されたユーザーのコンテキストのパスワード を指定します。省略すると入力が促されます。 変数 設定する環境変数を指定します。 値 環境変数に割り当てられる値を指定 します。 /K レジストリパス レジストリ キーからの情報を基に変数が 設定されることを指定します。 パスは hive\key\...\value の形式で指定します。 例: HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\TimeZoneInformation\StandardName. /F ファイル 使用するテキスト ファイルの名前を指定し ます。 /A x、y ファイルの絶対座標 (行 X、項目 Y) を パラメーターとして指定し、ファイル内を検索 します。 /R x,y 文字列 "文字列" を検索パラメーターとして ファイルへの相対座標を指定します。 /M 変数をシステム全体 (HKEY_LOCAL_MACHINE) の環境で設定することを指定します。 既定では、HKEY_CURRENT_USER 環境で変数 を設定するように設定されています。 /X x y 座標でファイルの内容を表示します。 /D 区切り文字 "," や "\" など、追加の区切り文字を指定し ます。ビルトインの区切り文字は空白、タブ、 キャリッジ リターン、ラインフィードです。 ASCII 文字はどれでも追加の区切り文字として 使用できます。区切り文字は、ビルトインの ものも含めて最大 15 個まで指定できます。 /? このヘルプを表示します。 注意: 1) SETX は、レジストリの中のマスター環境に変数を書き込みます。 2) ローカル システム上では、このツールで作成または変更した 変数は、現在のコマンド ウィンドウでは利用できませんが、 その後のコマンド ウィンドウで利用できます。 3) リモート システム上では、このツールで作成または変更した 変数は次のログオン セッションで利用できます。 4) 有効なレジストリ キー データの種類は REG_DWORD、REG_EXPAND_SZ、 REG_SZ, REG_MULTI_SZ です。 5) サポートされているハイブは HKEY_LOCAL_MACHINE (HKLM)、 HKEY_CURRENT_USER (HKCU) です。 6) 区切り文字は大文字と小文字を区別します。 7) REG_DWORD 値は、レジストリから 10 進数形式で 抽出されます。 例: SETX MACHINE COMPAQ SETX MACHINE "COMPAQ COMPUTER" /M SETX MYPATH "%PATH%" SETX MYPATH ~PATH~ SETX /S system /U user /P password MACHINE COMPAQ SETX /S system /U user /P password MYPATH ^%PATH^% SETX TZONE /K HKEY_LOCAL_MACHINE\System\CurrentControlSet\ Control\TimeZoneInformation\StandardName SETX BUILD /K "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\CurrentBuildNumber" /M SETX /S system /U user /P password TZONE /K HKEY_LOCAL_MACHINE\ System\CurrentControlSet\Control\TimeZoneInformation\ StandardName SETX /S system /U user /P password BUILD /K "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\ CurrentVersion\CurrentBuildNumber" /M SETX /F ipconfig.out /X SETX IPADDR /F ipconfig.out /A 5,11 SETX OCTET1 /F ipconfig.out /A 5,3 /D "#$*." SETX IPGATEWAY /F ipconfig.out /R 0,7 Gateway SETX /S system /U user /P password /F c:\ipconfig.out /X |
ちなみに動作検証はWindows 7 Professionalです。