Читайте о задержке расширения в help set
.
По умолчанию переменные среды (%foo%
) раскрываются, когда cmd
анализирует строку. И строка в этом случае представляет собой один оператор, который может включать в себя полный блок в скобках. Таким образом, после синтаксического анализа блока все вхождения переменных среды заменяются его значением во время синтаксического анализа . Если вы измените переменную в блоке и снова будете использовать ее после этого, вы увидите старое значение просто потому, что оно уже было заменено.
Отсроченное расширение, которое можно включить с помощью
setlocal enabledelayedexpansion
заставляет переменные среды, помеченные восклицательными знаками вместо знаков процента (!foo!
), оцениваться непосредственно перед выполнением оператора, который после анализа.
@echo off
setlocal enabledelayedexpansion enableextensions
set cond=true
echo %cond%
if %cond%==true (
echo "cond is true"
REM the below input does work now
set /p name1="enter your name"
echo name is: !name1!
)