【发布时间】:2016-06-02 21:52:49
【问题描述】:
我现在正在处理一些批处理文件,并且我在使用 SET 时遇到了一些我无法弄清楚的行为。
我正在解析由命令行实用程序生成的文件,以尝试验证寄存器写入。
我的测试代码是这样的:
@echo off
for /F "tokens=1,2,3,4,5,6 delims=>=- " %%A in (test.log) do (
if %%A == write (
set WVAL= %%F
set WVAL
echo Write value is %WVAL% )
)
pause
(仅供参考,在 test.log 文件中,有两行第一个参数是“write”)。
这个批处理文件的输出是这样的:
WVAL= 0x2100
Write value is
WVAL= 0x24c0
Write value is
Press any key to continue . . .
显然正在设置 WVAL(如独立的“set WVAL”命令所示)。但是为什么当我在回显行中使用它时它不显示该值?
让我更加困惑的是,如果我在 for 循环之外任意设置 WVAL,它会起作用。例如:
@echo off
set WVAL=2
for /F "tokens=1,2,3,4,5,6 delims=>=- " %%A in (test.log) do (
if %%A == write (
set WVAL= %%F
set WVAL
echo Write value is %WVAL% )
)
pause
将返回:
WVAL= 0x2100
Write value is 2
WVAL= 0x24c0
Write value is 2
Press any key to continue . . .
知道这是为什么吗?
谢谢。
-肖恩
【问题讨论】:
-
这似乎是超人的工作/delayed expansion
-
延迟扩展显然正是我们所需要的。在我发布这个问题后不久发现了一个相同的问题。
标签: batch-file