まず、実際の実行文です( バッチファイルの一部です ) ※ ファイル名 : vsvars32.bat
:GetWindowsSdkDir @call :GetWindowsSdkDirHelper HKLM > nul 2>&1 @if errorlevel 1 call :GetWindowsSdkDirHelper HKCU > nul 2>&1 @if errorlevel 1 set WindowsSdkDir=%VCINSTALLDIR%\PlatformSDK\ @exit /B 0 :GetWindowsSdkDirHelper @for /F "tokens=1,2*" %%i in ('reg query "%1\SOFTWARE\Microsoft\Microsoft SDKs\Windows" /v "CurrentInstallFolder"') DO ( if "%%i"=="CurrentInstallFolder" ( SET "WindowsSdkDir=%%k" ) ) @if "%WindowsSdkDir%"=="" exit /B 1 @exit /B 0
最初、call GetWindowsSdkDirHelper HKLM でバッチファイル内のサブルーチンを呼び出しています。HKLM は引数ですが、> nul 2>&1 は、全ての出力がnul にリダイレクトされて、何も表示させないという事です。2>&1 の記述は直前の出力に標準エラー出力をリダイレクトすると言う意味です。 次に、サブルーチン内は For /F でコマンドの出力結果を一行づつ読みだしてループ処理をする構文ですが、コマンド内の reg の結果は以下のようになります
! REG.EXE VERSION 3.0 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SDKs\Windows CurrentInstallFolder REG_SZ C:\Program Files\\Microsoft SDKs\Windows\v6.0A\
特別なオプションが無いので、行が空白で区切って取り出されて%i に最初のトークン、%j に次のトークン、残り全てが %k にセットされます。 結果的に "%%i"=="CurrentInstallFolder" に一致する行よりC:\Program Files\\Microsoft SDKs\Windows\v6.0A\ が環境変数にセットされます。( この時点で exit /B 0 できるはずですが、テストはしていません ) 最後に結果を示す値が errorlevel にセットされて返ります つまり、HKLM で発見できなければ、HKCU で再度実行し、それでも発見できない場合、set WindowsSdkDir=%VCINSTALLDIR%\PlatformSDK\ が実行されます 関連する記事
|
【コマンド : バッチファイルの最新記事】
- バッチファイル内で、実行中のファイルと引数のファイルを扱う特殊変数
- バッチファイル(コマンドプロンプト)で使用できる特殊な3つの環境変数
- バッチファイル内で、コマンドプロンプトが管理者権限で実行されているかのチェック
- デスクトップのアイコン表示を切り替えるバッチファイル
- バッチファイルで、二つのファイルが同じファイルかどうかチェックして if errorlevel で処理を分岐する
- バッチファイル内の Call コマンドによるサブルーチンの呼び出し( errorlevel を戻して if で判断する )
- あらかじめ指定しておいたフォルダの中を探して Excel のドキュメントを開くバッチファイル
- バッチファイル自身をフルパスで展開する変数 : %~f0
- バッチファイル : ファイル順のシャッフル
- コマンドプロンプト : 指定回数だけループ処理を行うバッチファイル
- SET /P : バッチファイルで入力した値を環境変数に設定して使用する
- バッチファイル : コマンドプロンプトの表示幅の変更
- コマンドプロンプト : バッチファイルで使う for コマンドの変数展開のテスト( vtest.bat )
- バッチファイルで、FOR に渡すパラメータの妥当性チェックを行う
- バッチファイルで、ファイルの中の行を指定してその行の文字列を実行する