我有以下属性文件
jmx.connector.ip=127.0.0.1
jmx.connector.port=12345
我想阅读并解析键值对
@ECHO OFF
set FILE=file.properties
REM initialize???
set JMXPORT=0
set JMXHOST=0
REM set their value???
for /F "tokens=1,2 delims==" %%i in (%FILE%) do (
if "%%i"=="jmx.connector.port" JMXPORT=%%j
if "%%i"=="jmx.connector.ip" JMXHOST=%%j
)
REM can't use their value
echo %JMXHOST%
echo %JMXPORT%
这不起作用。我想在for循环中设置JMXPORT
和JMXHOST
的值,并在循环外使用它们。我怎么能这样做?
答案 0 :(得分:2)
您在循环中错过了相应的set
调用。将循环更改为:
for /F "tokens=1,2 delims==" %%i in (%FILE%) do (
if "%%i"=="jmx.connector.port" set JMXPORT=%%j
if "%%i"=="jmx.connector.ip" set JMXHOST=%%j
)
它应该可以工作(至少它在Windows 7上为我做了)。
答案 1 :(得分:1)
尝试将set
添加到if
语句中,如下所示:
if "%%i"=="jmx.connector.port" set JMXPORT=%%j
if "%%i"=="jmx.connector.ip" set JMXHOST=%%j
如果这不起作用,那么您需要在批处理文件的开头启用延迟扩展,并为变量使用!
而不是%
,如下所示:
@ECHO OFF
setlocal ENABLEDELAYEDEXPANSION
set FILE=file.properties
REM initialize???
set JMXPORT=0
set JMXHOST=0
REM set their value???
for /F "tokens=1,2 delims==" %%i in (%FILE%) do (
if "%%i"=="jmx.connector.port" set JMXPORT=%%j
if "%%i"=="jmx.connector.ip" set JMXHOST=%%j
)
REM can't use their value
echo !JMXHOST!
echo !JMXPORT!
setlocal