Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Batch file 批处理-如何获取for循环块外部的变量?_Batch File - Fatal编程技术网

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,依此类推。见