Вам нужен еще один уровень расширения, так как парсер читает строку до того, как %name%
было определено со значением. Поэтому вам нужно отложить расширение, используя один из нескольких методов.
Этот ab использует команду Call
:
@Set /P "name=What is your Name? " && (Call Echo Welcome %%name%%) & Pause
И это использует отложенное расширение более правильно:
@Set /P "name=What is your Name? " && (SetLocal EnableDelayedExpansion & Echo Welcome !name! & EndLocal) & Pause
Этот использует другой экземпляр cmd.exe с его опцией отложенного расширения:
@Set /P "name=What is your Name? " && (Cmd /V /C Echo Welcome !name!) & Pause
И это использует For
l oop для аналогичной работы :
@Set /P "name=What is your name? " && (For /F "Tokens=1* Delims==" %%G In ('Set name 2^>NUL') Do @Echo Welcome %%H) & Pause