Properties.bat
Windowsのバッチファイルでプロパティファイルを読み込む環境変数に設定するプログラムです。仕様はプログラム中のコメントに記載しています。
実行に必要なバッチファイル(GitHub)
処理抜粋
プロパティファイルのキーと値を環境変数に設定する箇所を抜粋しています。
rem プロパティファイルから1行ずつ読み込む、環境変数に設定する for /f "usebackq tokens=1,2* delims==" %%a in ("ファイルパス") do ( setlocal enabledelayedexpansion call :IsIgnore %%a if !ERRORLEVEL! neq 0 ( endlocal call :SetProperty %%a %%b ) else ( endlocal ) ) rem 除外判定 :IsIgnore setlocal set VARNAME=%1 rem プロパティ名未指定は除外 if "%VARNAME%"=="" ( endlocal exit /b 0 ) rem コメント行は除外 if "!VARNAME:~0,1!"=="#" ( endlocal exit /b 0 ) endlocal exit /b 1 rem 前後空白を除去するため環境変数の設定を関数化する :SetProperty set %1=%2 exit /b
プロパティファイル例
key1=value1 key2 =value2 key3= value3 key4="va lu e4" #key5=value5 key6=
行の先頭に # を書くと、コメント行として扱われます。
実行後の環境変数
key1=value1 key2=value2 key3=value3 key4="va lu e4"
Properties.bat
@echo off rem ****************************************************************** rem * Properties.bat: プロパティファイルからプロパティ名と値のセットを取得し、環境変数に設定する rem * rem * [説明] rem * <仕様・ルール> rem * ・1行に プロパティ名=値 の形式で記述する rem * ・プロパティ名に空白を含めることはできない rem * ・プロパティ名、値の前後の空白は除去される rem * ・値に空白を含めるには " で値を囲む(本処理中に囲い文字の除去はしない) rem * ・行の先頭に # がある場合、コメント行とする rem * ・空行は無視される rem * ・値が空の場合、環境変数は未設定となる rem * rem * <戻り値> rem * ・正常に処理した場合、0を返す rem * ・プロパティファイルが存在しない場合、1を返す rem * ・引数が不正の場合、8を返す rem * ・その他、予期しないエラーなどの場合、9を返す rem * rem * [引数] rem * %1: プロパティファイルのパス rem * rem * [バージョン] rem * 1.0.0 rem ****************************************************************** rem echo Properties.bat %1 rem 利用する外部バッチファイル set BAT_FILEEXISTS="%~dp0\FileExists.bat" rem 引数 set FILE_PATH=%~1 rem NULL(不正)の場合、8を返す if not defined FILE_PATH ( endlocal exit /b 8 ) rem プロパティファイルが存在しない場合、1を返す call %BAT_FILEEXISTS% "%FILE_PATH%" if %ERRORLEVEL% neq 0 ( endlocal exit /b 1 ) for /f "usebackq tokens=1,2* delims==" %%a in ("%FILE_PATH%") do ( setlocal enabledelayedexpansion call :IsIgnore %%a if !ERRORLEVEL! neq 0 ( endlocal call :SetProperty %%a %%b ) else ( endlocal ) ) exit /b 0 rem ****************************************************************** rem * IsIgnore: 環境変数への設定の除外対象かの判定 rem * rem * [説明] rem * rem * [引数] rem * %1: プロパティ名 rem ****************************************************************** :IsIgnore setlocal set VARNAME=%1 rem プロパティ名未指定は除外 if "%VARNAME%"=="" ( rem echo Exclude %VARNAME% endlocal exit /b 0 ) rem コメント行は除外 if "!VARNAME:~0,1!"=="#" ( rem echo CommentLine %VARNAME% endlocal exit /b 0 ) endlocal exit /b 1 rem ****************************************************************** rem * SetProperty: 環境変数に設定する rem * rem * [説明] rem * 関数化の理由は前後の空白除去のため。 rem * rem * [引数] rem * %1: プロパティ名 rem * %2: 値 rem ****************************************************************** :SetProperty rem echo %1=%2 set %1=%2 exit /b