Я потратил последние 3 часа, пытаясь это выработать, но просто не смог найти решение. Здесь моя партия script:
if NOT Exist Counter.txt GOTO START
Type c:\counter.txt
if %COUNTER% EQU %Cycles% goto Pass
if NOT %COUNTER% EQU %Cycles% goto Cycle
:START
Set COUNTER=0
set CYCLES=250
:Cycle
set /A COUNTER=%COUNTER%+1 <----------- PROBLEM
echo Iteration %COUNTER% of %CYCLES%
echo Delay 3 seconds to reboot
choice /cy /n /t:y,3
warmboot.com
:Pass
pause
Что он делает, он запускает файл "warmboot.com" (который перезагружает мой компьютер) и работает в течение 250 циклов. Как только циклы выполняются в 250 раз (т.е. когда счетчик равен циклам), он останавливается.
В Windows это работает. Однако это не работает в среде DOS. Я пробовал версии с v4 вплоть до v6.22 и даже v7, и все они терпят неудачу, когда они достигают линии PROBLEM.
Если я это сделаю:
set /A COUNTER=%COUNTER%+1
echo %Counter%
ИЛИ это:
set /A COUNTER+=1
echo %Counter%
оба возвращают пустую строку, т.е. она не показывает ничего как выход.
Если я напечатаю:
set /?
то он показывает это:
Отображает, устанавливает или удаляет переменные среды cmd.exe.
SET [variable = [string]]
variable Задает имя переменной среды.
string Указывает последовательность символов для назначения переменной.
но набрав ту же команду под CMD в Windows, вы увидите намного больше. Я думаю, что функция SET под DOS не поддерживает арифметические функции, но для работы я должен запускать свои скрипты только в DOS.
Любые идеи?