Наиболее вероятная причина этой ошибки - раскрытие% переменной%, используемое в скобках, потому что в этом случае расширенное значение - это значение, которое переменная имела до входа в (блок). Простой пример:
@echo off
for /L %%i in (1,1,10) do (
set /P input=Enter input value:
if %input% == One (
echo Option "one" selected
)
if %input% == Two (
echo Option "two" selected
)
. . .
)
В предыдущем примере значение% input% всегда расширяется до нуля, поскольку эта переменная не существует до выполнения цикла FOR, поэтому значения if расширяются до if == One (
и вызывают вышеупомянутую ошибку. Помните, что расширение% var% достигается только один раз , когда команда для выполнения анализируется перед выполнением. В этом случае команда для выполнения является внешним FOR, поэтому все расширения% var%, включенные в нее на любом уровне , имеют такой эффект.
Способ решения этой проблемы - через Отложенное расширение , то есть сначала включите команду setlocal EnableDelayedExpansion
и замените все расширения% var% на! Var! из них. Таким образом, значение! Var! переменная будет расширяться каждый раз, когда будет выполняться команда, в которой она появляется. Введите set /?
и cmd /?
для получения дополнительной информации по этой теме.