Это звучит немного опасно для меня. SET, с которым вы не ошибетесь, SET> file создаст резервные копии ваших переменных, но для их восстановления требуется некоторая акробатика, и она кажется немного рискованной и, на самом деле, излишней.
Зачем восстанавливать их все, если только некоторые из них плохие.
С setx все может пойти не так
Причины акробатики в том, что SET не различает пользовательские переменные и переменные машины / системы. Существует REG QUERY, который может помочь отображать переменные окружения вместо SET, с некоторым умением. И это не рискованно, просто требует навыков.
Кроме того, вы можете подумать, что, поскольку SET отображает VARIABLE = VALUE, то, если вы используете VALUE в setx, оно поместит это значение в. Но у setx есть какое-то забавное поведение, если
установить ggg = r "r <- это устанавливает ggg к r" r
но если вы делаете
setx ggg r "r <- это устанавливает для ggg значение rr, и если вы хотите r" r, вам нужно сделать \"
Может быть, setx есть кавычки (я имею в виду, в пределах значения) не так уж и плохо, потому что вы все равно не хотите, чтобы там были какие-либо кавычки. Но стоит знать, что происходит.
Также
set ggg = rrr sss <--- устанавливает ggg в rrr sss
setx ggg rrr sss <--- устанавливает ggg в rrr
поэтому setx нужны кавычки вокруг значения. Если вы этого не знали и пытались использовать setx для замены ВСЕХ переменных среды, вы можете ошибиться.
поэтому он требует кавычек вокруг значения (в очевидных случаях, т.е. значение имеет пробелы) и ест кавычки внутри значения. А также при использовании -m (что вы делаете для системных переменных), это необходимо в конце. Если вы поместите его в начало, оно будет иметь значение переменной -m
все это не очевидно.
и он устанавливает переменные постоянно.
Так что я лично не хотел бы использовать setx для каждой переменной, выдаваемой SET, в автоматическом режиме, это просто не нужно, и если бы я это сделал, я бы хотел, чтобы это было тщательно проверено ...
И если я использую его для одной переменной, я склонен проверять, что она работает, потому что я мог сделать ошибку, она может иметь причуду, и она постоянна.
Лично я бы сделал резервную копию переменных, как с помощью SET .. или SET | find /i "path"> a Перед выполнением setx для path ..
Но я не буду пытаться использовать setx для того, что выгружается из SET .. или из REG QUERY .., потому что я не хотел бы постоянно менять переменные, которые в порядке. много переменных, когда, возможно, один смешной.
Если вы не пишете командные файлы, чтобы изменить все переменные окружения, то вы вряд ли получите все свои переменные уничтоженными или испорченными!
Возможно, вам захочется создать bat-файл с отдельной командой setx для переменных, которые вы хотите заменить, и создайте резервную копию.
Я предлагаю это установить mvar = HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment setx mvar "% mvar%" set uvar = HKCU\Environment setx uvar "% uvar%"
Все, что сказал,
и до сих пор не делать вещи за один раз ..
Вот две команды для /f, которые помогут вам сгенерировать 2 bat-файла, один для ваших пользовательских переменных, другой для переменных окружения, так что помогите вам, бог.
:: delete a.bat and b.bat so it doesn't append onto what's already there
del a.bat
del b.bat
C:\>for /f "tokens=1,2,3" %f in ('reg query "%uvar%" ^| tail -n +5') do @echo setx %f "%h" >>a.bat
C:\>for /f "tokens=1,2,3" %f in ('reg query "%mvar%" ^| tail -n +5') do @echo setx %f "%h" -m >>b.bat
затем отредактируйте их и убедитесь, что они имеют только то, что вы хотите ... и вы не видите ничего смешного.
вам, вероятно, было бы лучше, если бы вы так не делали, и ... вы знаете, что вы могли бы сделать ... это сделать резервные копии всех системных и пользовательских переменных, но без указания setx, так что вы можете создавать их резервные копии без страшного секса. на всех из них.
и нет необходимости в кавычках около% h, потому что не записывает setx в.
del a.bat del b.bat
C:\>for /f "tokens=1,2,3" %f in ('reg query "%uvar%" ^| tail -n +5') do @echo %f %h >>a.bat
C:\>for /f "tokens=1,2,3" %f in ('reg query "%mvar%" ^| tail -n +5') do @echo %f %h >>b.bat
Тогда, если вы могли бы добавить слово перед ними.
C:\>for /f "tokens=1,2,3" %f in ('reg query "%uvar%" ^| tail -n +5') do @echo set %f=%h >>a.bat
C:\>for /f "tokens=1,2,3" %f in ('reg query "%mvar%" ^| tail -n +5') do @echo set %f=%h >>b.bat
Запустите те.
Посмотрите, если все работает нормально ..
тогда, может быть, если вы хотите установить все переменные окружения постоянно, предположительно, когда в этом нет необходимости (поскольку это почти никогда не требуется). Затем вы можете перейти с установленной версии for на версию setx.
Я не собираюсь писать bat-файл для этого, потому что он не очень хорошо протестирован, но это все, что должно быть в любых пакетных файлах.
Соберите все на свой страх и риск, и я советую, когда вы это сделаете, вы хорошо протестируете, как, например, на виртуальной машине.