bat文件:变量有错误值,直到下次执行bat?

时间:2011-02-25 09:39:07

标签: windows command-line batch-file

我正在从.properties文件中读取属性(看起来像:applocation = c:\ x \ y \ z)。 使用以下行:FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i

%1是我作为参数传递的.property文件的位置。

设置属性后我做了:

  

echo%applocation%

但是,当我第一次执行bat文件时,它会回显我执行bat文件的位置。只有在从同一控制台窗口再次执行bat文件后才能获得正确的值。

这非常令人不快,特别是因为如果我关闭命令窗口,我必须重新执行此操作。

2 个答案:

答案 0 :(得分:3)

我猜,你可能会在if或其他for的块中,例如:

if foo (
    FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i
    echo %applocation%
)

这不起作用,因为当解析这样的块时,环境变量会被扩展,而不是在运行它时。

使用延迟扩展

setlocal enabledelayedexpansion

在批处理文件的顶部,然后使用

if foo (
    FOR /F "eol=; tokens=2,2 delims==" %%i IN ('findstr /i "applocation" %1') DO set name=%%i
    echo !applocation!
)

答案 1 :(得分:1)