Parece um pouco perigoso para mim. SET você não pode ir muito errado com, SET > arquivo fará o backup de suas variáveis, mas para restaurá-los todos requer algumas acrobacias e parece um pouco arriscado e exagero na verdade.
Por que restaurá-los se apenas alguns forem ruins?
As coisas podem dar errado com o setx ..
As razões para as acrobacias são que o SET não faz distinção entre variáveis de usuário e variáveis de máquina / sistema. Há REG QUERY que pode ajudar a exibir variáveis de ambiente em vez de SET, com alguma habilidade. E não é arriscado, só requer alguma habilidade.
Além disso, você pode pensar que, como o SET exibe VARIABLE = VALUE, se você usou VALUE no setx, ele colocaria esse valor. Mas o setx tem algum comportamento engraçado, se você fizer isso
set ggg = r "r < - que define ggg para r" r
mas se você fizer
setx ggg r "r < - que define ggg para rr, e se você quiser r" r você tem que fazer \ "
Talvez setx comer aspas (quero dizer, dentro do valor) não é uma coisa ruim porque você provavelmente não quer nenhuma citação de qualquer maneira. Mas vale a pena saber o que está acontecendo.
definir ggg = rrr sss < --- define ggg para rrr sss
setx ggg rrr sss < --- define ggg para rrr
para que o setx precise de aspas em torno do valor. Se você não sabia disso e tentou usar o setx para substituir TODAS as variáveis de ambiente, pode dar errado.
, por isso, exige cotações em torno do valor (em casos óbvios, ou seja, o valor tem espaços) e come citações dentro do valor. E também ao usar -m (o que você faz para variáveis de sistema), ele precisa no final. Se você colocá-lo no começo, ele assume como o valor da variável sendo -m
tudo isso não é óbvio.
e está definindo variáveis permanentemente.
Então, pessoalmente, eu não gostaria de usar o setx para cada variável lançada pelo SET em uma coisa automatizada, isso não é necessário, e se eu quisesse, seria altamente testado ...
E se eu usá-lo em uma variável, tenho a tendência de verificar se funcionou, porque talvez eu tenha cometido um erro, pode ter uma peculiaridade e é permanente.
Pessoalmente, eu fazia backup de variáveis, como com SET .. ou SET | encontrar / i "caminho" > a Antes de fazer o setx no caminho ..
Mas não tentaria usar setx no que é despejado do SET .. ou do REG CONSULTA .. porque não quero alterar permanentemente as variáveis que estão bem. muitas variáveis quando talvez uma é engraçada.
Se você não está escrevendo arquivos em lote para alterar todas as suas variáveis de ambiente, provavelmente não conseguirá limpar todas as suas variáveis ou ficar confuso!
O que você pode querer fazer, é criar um arquivo bat com o comando setx individual para as variáveis que deseja substituir e fazer o backup
Eu sugiro que esses
set mvar = HKLM \ SYSTEM \ CurrentControlSet \ Control \ Gerenciador de sessão \ Ambiente
setx mvar "% mvar%"
set uvar = HKCU \ Ambiente
setx uvar "% uvar%"
Tudo o que foi dito,
e ainda não vai fazer as coisas de uma só vez.
aqui estão 2 comandos / f que ajudam você a gerar 2 arquivos bat, um para suas variáveis de usuário, um para suas variáveis de ambiente, então ajude você.
:: 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
edite-os e verifique se eles só têm o que você quer ... e não vê nada de engraçado.
você provavelmente seria melhor não fazê-lo assim, e .. você sabe o que você poderia fazer .. é backup de todas as variáveis do sistema e variáveis do usuário, mas sem dizer setx, então você tem-los backup sem o assustador fazendo sexo setx em todos eles.
e não há necessidade de aspas em torno de% h porque não está escrevendo 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
Então, se você puder adicionar a palavra antes deles.
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
Execute esses.
Veja se as coisas funcionam bem ..
então talvez se você quiser definir todas as variáveis de ambiente permanentemente, presumivelmente quando for desnecessário (já que quase nunca seria necessário). Então você pode mudar da versão do jogo para, para a versão setx.
Eu não vou escrever um arquivo bat para fazer isso porque ele não está bem testado, mas isso é tudo que precisa estar em qualquer arquivo batch.
Junte tudo por sua conta e risco, e eu sugiro que quando você fizer isso, teste bem, como em uma máquina virtual, talvez.