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.