@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 просто просматривает два имеющихся у меня текстовых файла и передает их в исполняемый файл, который возвращает контрольную сумму для файла. Кажется, он работает нормально, так как ОШИБКА - это результат исполняемого файла.)
Ответ: необходимо использовать / 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!
)