我正在从.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文件后才能获得正确的值。
这非常令人不快,特别是因为如果我关闭命令窗口,我必须重新执行此操作。
答案 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)