Есть ли способ нажать и вытолкнуть все переменные среды в пакетном скрипте? Например, я хотел бы сделать что-то вроде этого:
pushEnvironmentVariables
call "%VS140COMNTOOLS%\vsvars32.bat"
(do some stuff...)
popEnvironmentVariables
pushEnvironmentVariables
call "%VS90COMNTOOLS%\vsvars32.bat"
(do some other stuff...)
popEnvironmentVariables
batch
environment-variables
שלומי שטיין
источник
источник
PATH
- например или по какой-то причине. Я особенно заинтересован в push / pop переменной пути. Есть что-нибудь, что говорит против резервного копирования / восстановленияPATH
?Немного опоздал на сцену, но все равно идет. Ниже приведена реализация структуры данных стека в пакетных сценариях Windows.
Особенности:
Я использую стек в моих пакетных файлах для отслеживания вызовов подпрограмм. Каждая подпрограмма в моих пакетных файлах начинается с Call: Push% 0 , который помещает имя текущей подпрограммы в стек и заканчивается Call: Pop .
Некоторые могут посчитать это чрезмерным убийством для пакетных сценариев, но я наслаждался созданием этого, и я надеюсь, что кто-то найдет это полезным, наслаждайтесь .
Итак, чтобы вытолкнуть все переменные среды, вы можете вызвать: PushAllEnvironmentVariables, чтобы восстановить все переменные среды, вы можете вызвать: PopAllEnvironmentVariables
источник
For /f "Tokens=* Delims=" %%a In ('Set') Do Call :Push "%%a"
Чтобы восстановить все переменные окружения, которые вы можете использовать:For /l %%a In (!$Stack[0]!,-1,1) Do (Set !$Stack[%%a]!)
Я обновил ответ, чтобы включить 2 подпрограммы, которые реализуют это.