windows - 为什么在使用 ENABLEDELAYEDEXPANSION 时这个变量不会在 for 循环中设置?

标签 windows variables command-line batch-file

@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

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

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

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

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

答案:需要在集合上使用/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!
)

最佳答案

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

关于windows - 为什么在使用 ENABLEDELAYEDEXPANSION 时这个变量不会在 for 循环中设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5736652/

相关文章:

shell - 如何使用.sig文件验证下载的文件?

windows - 避免在读取文件时更新上次访问的日期/时间

javascript - 支持 C 和嵌入式 Javascript 的 IDE

variables - 如何使用 Javascript 在 qualtrics 中设置嵌入式数据

windows - 为什么 %processor_architecture% 总是返回 x86 而不是 AMD64

python - 为什么文件权限在 Python 和 bash 中显示不同?

windows - 如何在CMD命令输出中查找单词

windows - 从文件句柄或文件 ID 打开备用数据流 (ADS)

variables - 有什么方法可以在 LaTeX 中定义变量吗?

variables - 输入名称选择器中的 jquery 变量