Batch file 批处理-如何获取for循环块外部的变量?
我有以下属性文件Batch file 批处理-如何获取for循环块外部的变量?,batch-file,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.c
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循环内设置
jxport
和JMXHOST
的值,并在循环外使用它们。如何执行此操作?您的循环中缺少相应的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上是这样)。尝试将
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
如果这不起作用,那么您需要在批处理文件的开头启用延迟扩展,并使用代码>而不是变量的%
,如下所示:
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
您键入了错误的for循环变量。。。我会修正我的答案。您在for循环中使用了%%i
,但在set
语句中使用了%%j
。不,%%i
应该从for
循环中获取属性的键作为第一个标记,%%j
应该获取属性的值。很高兴您已经计算出来了。每个标记都被分配到for循环中声明的字符后面的一个字符。在我的示例中,第一个令牌转到%%i,第二个转到%%j,如果有第三个令牌,它将转到%%k,依此类推。见