cmd /c "set PATH=test && echo %PATH%"
будет интерпретировать PATH
до того, как будет изменено.Это на самом деле изящный трюк для экспорта переменных среды вне блока setlocal/endlocal
с помощью:
ste xyzzy=twisty
startlocal
set xyzzy=plugh
endlocal && set xyzzy=%xyzzy%
Обычно (без бита && xyzzy=...
переменная xyzzy
все равно будет исходным значением twistyпосле блока, но тот факт, что %xyzzy%
интерпретируется перед всей строкой endlocal
, в то время как set
действует после команды endlocal
, позволяет экспортировать изменение.
Если вы хотите интерпретировать переменную после set
, вам нужно отложенное расширение:
cmd /v:on /c "set PATH=test && echo !PATH!"
/v:on
включает отложенное расширение и использование !
вместо %
означает, что вы хотите использовать это отложенное расширение.