【问题标题】:Nested "SET" not working as expected in batch file嵌套的“SET”在批处理文件中没有按预期工作
【发布时间】: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


【解决方案1】:

在发帖 5 秒后,我发现这个帖子正好回答了我的问题:

Batch File not setting variable

正如 Dennis van Gils 在评论中提到的,实际上需要延迟扩展。

感谢其他帖子中的 MC ND 回答问题。

看起来我需要在询问之前做更多的研究!

【讨论】:

    猜你喜欢
    • 2020-12-17
    • 2015-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多