嵌套" SET"在批处理文件中没有按预期工作

时间:2016-06-02 21:52:50

标签: batch-file

我现在正在处理一些批处理文件,并且我遇到了一些使用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文件中,有两行,其第一个参数是"写")。

此批处理文件的输出为:

WVAL= 0x2100
Write value is
WVAL= 0x24c0
Write value is
Press any key to continue . . .

显然正在设置WVAL(由独立"设置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 . . .

知道为什么会这样吗?

感谢。

-Sean

1 个答案:

答案 0 :(得分:0)

发帖后5秒,我发现这个帖子完全回答了我的问题:

Batch File not setting variable

丹尼斯·范吉尔斯在评论中提到,实际上需要延迟扩张。

感谢另一个主题中的MC ND来回答这个问题。

在询问之前我似乎需要做更多的研究!