【问题标题】:Why won't this variable set in the for loop while using ENABLEDELAYEDEXPANSION?为什么在使用 ENABLEDELAYEDEXPANSION 时不会在 for 循环中设置此变量?
【发布时间】:2011-08-09 20:22:13
【问题描述】:
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set seed=-1
echo seed init val:%seed%

for %%f in (*.txt) DO (
    checksum %%f %seed%
    echo error level: !ERRORLEVEL!
    set seed = !ERRORLEVEL!
    echo new seed val:!seed!
)

输出:

C:\>returnval
seed init val:-1
Seed in main : FFFFFFFF
The 32-bit checksum for result.txt is 44DD58EE
error level: 1155356910
new seed val:-1 //still -1 ?? should be 1155356910
Seed in main : FFFFFFFF
The 32-bit checksum for test.txt is E245740F
error level: -498764785
new seed val:-1

设置种子 = ERRORLEVEL 的行不起作用。
要回显错误级别,我确实需要使用“!”否则它将无法正常展开和显示。

当我们得到新的种子值时,你可以看到:它仍然是 -1

如何将seed 设置为最后一个ERRORVALUE

(旁注,for 循环只是查找我拥有的两个文本文件并将其提供给返回文件校验和的 exe。这似乎工作正常,因为 ERRORLEVEL 是 exe 的结果。 )

答案:需要在set上使用/a来获取种子取ERRORLEVEl的数值,然后使用“!”校验和参数种子也是如此。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

set seed=-1
echo seed init val:%seed%

for %%f in (*.txt) DO (
    checksum %%f !seed!
    echo error level: !ERRORLEVEL!
    set /a seed = !ERRORLEVEL!
    echo new seed val:!seed!
)

【问题讨论】:

    标签: windows variables command-line batch-file


    【解决方案1】:

    您已经知道需要使用延迟扩展才能使其正常工作,所以它应该是set seed = !ERRORLEVEL!。和echo seed value: !seed! 打印出来时。经验法则:如果它处于循环中,则必须延迟扩展。

    【讨论】:

    • 是的,我也尝试过,但没有运气,请查看更新的代码和结果,按原样复制和粘贴...谢谢.....
    • 您还需要使用set seed=!errorlevel!,否则您将创建一个名为seed (注意尾随空格)的变量,其值以空格开头。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-05
    • 1970-01-01
    • 2023-02-26
    相关资源
    最近更新 更多