Fichier de commandes pour sauvegarder et modifier les variables d'environnement

2

Comment puis-je écrire un fichier de commandes qui sauvegarde et restaure les variables d'environnement.

Après cela, je souhaite définir certaines des variables et en cas de problème, je peux annuler les modifications avec ce fichier de commandes créé.

pique-nique
la source
Quel système d'exploitation utilisez-vous?
uSlackr
il est windows xp
picknick

Réponses:

2

Utiliser l' regoutil système:

Pour sauvegarder l'environnement système:

reg save "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" env_sys_backup.hiv /y

Pour sauvegarder l'environnement utilisateur:

reg save "HKCU\Environment" env_usr_backup.hiv /y

Restaurer:

reg restore "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" env_sys_backup.hiv
reg restore "HKCU\Environment" env_usr_backup.hiv

Voir reg /?pour l'aide.

Piotr Dobrogost
la source
hmm, ce genre de méthode semble logique .. Je ne l'ai pas essayée mais elle a l'air sûre et logique
barlop
Excellente solution. Mais vous devez ajouter la clé reg pour la restauration: Par exemple, reg HKCU \ Environment restore env_usr_backup.hiv Ensuite, cela fonctionne, je l’ai essayé sous Windows 7 à Windows 2008.
mardi
1

Si vous utilisez Windows, vous ne pouvez pas définir les variables d'environnement globales à partir d'un fichier de commandes sans logiciel supplémentaire. Ils doivent être définis via l’applet Système du Panneau de configuration afin de les rendre globaux.

Quant à les capturer, utiliser SET >env.txtles capturera.

Ce fichier de commandes doit lire la sortie précédente et la réinitialiser pour la fenêtre en cours:

for /f %%a in (env.txt) do (
set %%a

)

uSlackr
la source
plutôt bon ... même si vous pouvez utiliser setx pour définir global. setx var value -m Je suppose que votre fichier batch pourrait nécessiter une petite modification, si vous l'utilisez
barlop le
setx ne fait pas partie de Windows 7 ni de XP. Est-ce un utilitaire de kit de ressources?
uSlackr
oui, c'est dans le kit de ressources wik2k qui fonctionne pour n'importe quel NT microsoft.com/download/fr/confirmation.aspx?id=4200
barlop le
0

Cela semble un peu dangereux pour moi. SET vous ne pouvez pas vous tromper, SET> fichier sauvegardera vos variables, mais les restaurer toutes nécessite des acrobaties et semble un peu risqué, et vraiment excessif.

Pourquoi les restaurer tous si seulement certains sont mauvais.

Les choses peuvent mal se passer avec setx ..

Les raisons de l'acrobatie sont que SET ne fait pas la distinction entre les variables utilisateur et les variables machine / système. Il y a REG QUERY qui peut aider à afficher des variables d'environnement au lieu de SET, avec quelques compétences. Et ce n’est pas risqué, il faut juste un peu d’habileté.

De plus, vous pourriez penser que puisque SET affiche VARIABLE = VALUE, si vous utilisiez VALUE dans setx, cette valeur serait mise. Mais setx a un comportement amusant, si vous le faites

set ggg = r "r <- qui définit ggg sur r" r

mais si vous le faites

setx ggg r "r <- qui définit ggg sur rr, et si vous voulez r" r, vous devez le faire \ "

Peut-être que setx manger des guillemets (je veux dire, dans les limites de la valeur) n’est pas une mauvaise chose, car vous n’avez probablement pas envie de citer de toute façon. Mais cela vaut la peine de savoir ce qui se passe.

Aussi

set ggg = rrr sss <--- met ggg sur rrr sss

setx ggg rrr sss <--- définit ggg sur rrr

donc setx a besoin de guillemets autour de la valeur. Si vous ne le saviez pas et que vous avez essayé d'utiliser setx pour remplacer TOUTES vos variables d'environnement, vous risqueriez de vous tromper.

il faut donc des guillemets autour de la valeur (dans les cas évidents, c’est-à-dire que la valeur a des espaces) et mange des guillemets dans la valeur. Et aussi lorsque vous utilisez -m (ce que vous faites pour les variables système), il en a besoin à la fin. Si vous le mettez au début, cela prend comme valeur de variable étant -m

tout cela n'est pas évident.

et cela crée des variables de façon permanente.

Donc, personnellement, je ne voudrais pas utiliser setx pour chaque variable unique émise par SET dans un processus automatisé, ce n'est tout simplement pas nécessaire, et si je le faisais, je le voudrais bien testé.

Et si je l’utilise sur une variable, j’ai tendance à vérifier que cela a fonctionné, car j’ai peut-être commis une erreur, il se peut qu’il ait une bizarrerie, et c’est permanent.

Personnellement, je sauvegardais des variables, comme avec SET .. ou SET | find / i "chemin"> a Avant de faire setx sur chemin ..

Mais n'essaierais pas d'utiliser setx sur ce qui est vidé depuis SET .. ou depuis REG QUERY .. 'parce que je ne voudrais pas changer de façon permanente les variables qui conviennent. beaucoup de variables quand peut-être une est drôle.

Si vous n'écrivez pas de fichiers de commandes pour modifier toutes vos variables d'environnement, il est peu probable que toutes vos variables soient effacées ou altérées!

Ce que vous voudrez peut-être faire, c’est créer un fichier bat avec la commande individuelle setx pour les variables que vous souhaitez remplacer, et le sauvegarder

Je suggère ces ensembles mvar = HKLM \ SYSTEM \ CurrentControlSet \ Control \ Gestionnaire de session \ Environment setx mvar "% mvar%" uvar = HKCU \ Environment setx uvar "% uvar%"

Cela dit,

et toujours ne va pas faire les choses en une seule fois ..

Voici 2 commandes pour / f qui vous aideraient à générer 2 fichiers bat, un pour vos variables utilisateur, un pour vos variables d’environnement, alors aidez-vous mon Dieu.

:: 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

puis éditez-les et assurez-vous qu’ils n’ont que ce que vous voulez… et vous ne voyez rien d’amusant.

vous seriez probablement mieux de ne pas le faire comme ça, et .. vous savez ce que vous pourriez faire .. est de sauvegarder toutes les variables système et les variables utilisateur, mais sans dire setx, vous les avez donc sauvegardées sans la peur du sexe setx sur chacun d'eux.

et pas besoin de guillemets autour de% h 'cos n'écrivant pas setx dans.

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

Ensuite, si vous pouviez ajouter le mot défini devant eux.

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

Courez ceux-là.

Voir si les choses fonctionnent correctement ..

alors peut-être si vous voulez définir toutes les variables d'environnement de manière permanente, probablement quand c'est inutile (vu que ce n'est presque jamais nécessaire). Ensuite, vous pouvez passer de la version définie de for à la version setx.

Je ne vais pas écrire un fichier bat pour le faire car ce n'est pas bien testé, mais c'est tout ce qui aurait besoin d'être dans un fichier batch.

Rassemblez-le à vos risques et périls, et je suggère que lorsque vous le faites, vous le testez bien, comme sur une machine virtuelle peut-être.

barlop
la source
0

Vous pouvez peut-être inclure votre script entre SETLOCAL / ENDLOCAL, de sorte que toutes les modifications apportées aux variables env deviennent locales et qu'après ENDLOCAL, votre ancien environnement soit restauré.

mak
la source