SQLの窓

2009年11月11日


バッチファイル : VS9.0のMicrosoft純正バッチ処理 : For /F : バッチファイルでレジストリの値を判断材料にする

まず、実際の実行文です( バッチファイルの一部です )
※ ファイル名 : 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\ が実行されます

関連する記事


posted by lightbox at 2009-11-11 10:18 | コマンド : バッチファイル | このブログの読者になる | 更新情報をチェックする
バッチ処理

Microsoft Office
container 終わり

フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり