Когда , if
команда анализируется, синтаксический анализатор видит
echo %!prod_path!%
и здесь возникает проблема: нормальное расширение (%var%
) выполняется перед отложенным расширением (!var!
) поэтому этот код пытается извлечь содержимое переменной, когда имя переменной еще не определено.
Конечно, обратный синтаксис также не будет работать
echo !%prod_path%!
В этом случае имя переменной оценивается во время разбора, но во время разбора переменная все еще не имеет значения, поэтому, когда происходит отложенное расширение, имя переменной для чтения не существует.
Вам нужно расширение с двойной задержкой, то есть вам нужно что-то вроде
echo !!prod_path!!
Но это неверный синтаксис.
Итак, нам нужно использовать отложенное расширение для получения имени переменной, которую нам нужно прочитать, а затем отложенное расширение для получения значения внутри переменной.
Самое простое решение - изменить структуру кода, чтобы избежать проблемы (call
subrotine, использовать goto
, ...), но есть и другая альтернатива.
for %%a in (!prod_path!) do echo !%%a!
Получить имя переменной (первое отложенное расширение), сохранить полученное значение в параметре for
forableable и затем прочитать значение в переменной, на которую ссылается заменяемый параметр (второе расширенное расширение)