使用ENABLEDELAYEDEXPANSION时,为什么不在for循环中设置此变量?

时间:2011-04-20 21:07:08

标签: 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

设置种子= 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!
)

1 个答案:

答案 0 :(得分:2)

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