批处理 - 如何在for-loop块之外获取变量?

时间:2013-01-31 21:07:29

标签: batch-file

我有以下属性文件

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的值,并在循环外使用它们。我怎么能这样做?

2 个答案:

答案 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