対応方法
バッチファイルから ini ファイルを読込む場合 VBS を使用することで実現する
具体的には、バッチファイルから VBS を呼び出して ini ファイルより値を取得して VBS から戻り値を受け取り、実現する
取得する ini ファイルの中身
<設定値>*****************************************************'<コメント>#######################################
[Path]
WorkPath=C:/src/wk 'Work Folder Path
実際のコード
@echo off
set iniFileName=sample.ini
for /f "usebackq tokens=* delims=" %%A in (`call cscript //Nologo getProfileString.vbs "%iniFileName%" Path WorkPath`) do set ret=%%A
echo "%ret%"
pause
exit
Option Explicit
rem /*****************************************************************
rem * getProfileString.vbs iniFileName, sectionName, entryName
rem *
rem * 引数
rem * iniFileName : 設定ファイル名(フルパス)
rem * sectionName : セクション名
rem * entryName : エントリー名
rem * 動作
rem * 引数に指定された設定ファイルより指定した
rem * 「セクション」,「エントリー」に対応する設定値を返す
rem * 先頭がカンマの場合はコメント行として扱う
rem * 行の途中でカンマがある場合は直前までの文字列(右空白除去)を
rem * 設定値として扱う
rem * 戻り値
rem * 設定値(見つからなかった場合およびエラーの場合は空を返す)
rem *****************************************************************/
Dim ret
Dim fs
Dim readLineObj
Dim searchFlg
Dim buffer
rem ファイルシステムアクセス用
Set fs = CreateObject( "Scripting.FileSystemObject" )
ret = ""
rem ファイルを開く
on error resume next
Set readLineObj = fs.OpenTextFile( Wscript.Arguments(0), 1 )
if Err.Number <> 0 then
rem ファイルアクセスエラーの場合は終了
Wscript.Echo ret
Wscript.Quit
end if
on error goto 0
rem 検索処理用のフラグ
searchFlg = false
rem 読込みループ
Do While not readLineObj.AtEndOfStream
rem 行単位の読込み
buffer = readLineObj.ReadLine
rem 空の行以外の場合
if Trim(buffer) <> "" then
rem 対象セクションの場合
if Ucase(Trim(buffer)) = "[" & Ucase( Wscript.Arguments(1) ) & "]" then
searchFlg = true
else
rem 設定値を取得
ret = GetProfileString(buffer, Wscript.Arguments(2), searchFlg)
rem エントリー名が見つからなかった場合
if searchFlg And IsEmpty(ret) then
ret = ""
end if
rem 設定値を取得できた場合はループを抜ける
if searchFlg And (Len(ret) <> 0) then Exit Do
end if
end if
Loop
readLineObj.Close
Wscript.Echo ret
Wscript.Quit
rem /*****************************************************************
rem * 引数に指定された設定ファイルより指定した
rem * 「セクション」,「エントリー」に対応する設定値を返す
rem * 先頭がカンマの場合はコメント行として扱う
rem * 行の途中でカンマがある場合は直前までの文字列(右空白除去)を
rem * 設定値として扱う
rem *
rem * 引数
rem * buffer : 設定ファイルより読込んだ行
rem * sectionName : セクション名
rem * searchFlg : 検索用フラグ
rem * 戻り値
rem * 設定値(見つからなかった場合およびエラーの場合は空を返す)
rem *****************************************************************/
Function GetProfileString ( buffer, sectionName, searchFlg )
Dim ret
Dim entries
Dim entry
ret = ""
if searchFlg then
rem 次のセクションの場合
if Left(Trim(buffer) ,1) = "[" then
rem ループを抜ける
GetProfileString = Empty
Exit Function
end if
entries = Split(buffer, "'")
entry = Split(entries(0), "=")
rem エントリーの場合
if (Ubound(entry) = 1) then
rem 検索対象のエントリーの場合
if Ucase(Trim(entry(0))) = Ucase(sectionName) then
ret = RTrim(entry(1))
End if
end if
end if
GetProfileString = ret
End Function