Почему эта переменная не устанавливается в цикле for при использовании ENABLEDELAYEDEXPANSION? - PullRequest
1 голос
/ 21 апреля 2011
@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!
)

1 Ответ

2 голосов
/ 21 апреля 2011

Вы уже знаете, что для правильной работы необходимо использовать отложенное расширение, поэтому оно должно быть set seed = !ERRORLEVEL!. И echo seed value: !seed! при распечатке. Эмпирическое правило: если оно в цикле, то вы должны отложить расширение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...