1

我有以下属性文件

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 循环中设置值JMXPORTJMXHOST在循环外使用它们。我怎样才能做到这一点?

4

2 回答 2

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 上对我有用)。

于 2013-01-31T21:12:00.853 回答
1

尝试添加setif语句中,如下所示:

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
于 2013-01-31T21:14:14.307 回答