@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/