@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的行不工作。
要回显错误级别,我确实需要使用“!”否则将无法正确展开和显示。
当我们得到新的种子值时,您可以看到:它仍然是-1
如何将
seed
设置为最后一个ERRORVALUE
?(另一方面,for循环只是查找我拥有的两个文本文件,并将其提供给一个exe,该exe返回文件的校验和。这似乎工作正常,因为errorlevel是exe的结果。)
答:需要在集合上使用/a,让种子获取errorlevel的数值,然后使用“!”对于校验和参数seed也是如此。
@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!
。打印出来的时候。经验法则:如果它在一个循环中,则必须延迟扩展。