Ваш результат связан с тем, что% name% раскрывается во время фазы синтаксического анализа, и вся строка разбирается сразу перед заданным значением.
Вы можете получить текущее значение в той же строке, что и команда set, одним из двух способов.
1) используйте CALL для повторного анализа ECHO% NAME%:
set name=value&call echo %^name%
Я положил ^
между процентами на тот случай, если имя уже было определено до выполнения строки. Без каретки вы получите старое значение.
Примечание: ваша исходная строка имела пробел перед &
, этот пробел будет включен в значение переменной. Вы можете предотвратить лишнее пространство, используя кавычки: set "name=value" &...
2) использовать отложенное расширение, чтобы получить значение во время выполнения, а не во время анализа. В большинстве сред расширение по умолчанию не включено. Вы можете включить отложенное расширение в командной строке, используя соответствующий параметр CMD.EXE.
cmd /v:on
set "name=value" & echo !name!
Задержанное расширение, безусловно, может использоваться в командной строке, но оно чаще используется в командном файле. SETLOCAL используется для включения отложенного расширения в пакетном файле (не работает из командной строки)
setlocal enableDelayedExpansion
set "name=value" & echo !name!