Existe-t-il une commande source équivalente dans Windows CMD comme dans bash ou tcsh?

Je sais que dans le monde unix, si vous éditez votre fichier .profile ou .cshrc, vous pouvez faire un source ~ / .profile ou un source ~ / .cshrc pour obtenir l’effet sur votre session en cours. Si j’ai modifié quelque chose dans la variable système sous Windows, comment puis-je effectuer la session d’invite de commandes en cours sans quitter la session d’invite de commandes et ouvrir une autre session d’invite de commandes?

Je crains que non, mais vous pouvez commencer à utiliser Powershell, qui prend en charge le sourcing de points. Puisque la fenêtre de powershell est vraiment basée sur cmd, toutes vos commandes dos continueront à fonctionner, et vous gagnerez en puissance, beaucoup plus de puissance.

Dans l’invite de commande Windows habituelle (c.-à-d. Cmd.exe), utiliser simplement l’ call mybat.bat fait ce que je voulais. J’ai obtenu toutes les variables d’environnement définies.

Le shell dos supportera les fichiers .bat ne contenant que des assignations aux variables qui, une fois exécutées, créeront les variables dans l’environnement actuel.

  c:> type EnvSetTest.bat set TESTXYZ=XYZ c:> .\EnvSetTest.bat c:> set | find "TESTX" TESTXYZ=XYZ c:> 

IHTH.

La seule façon de fonctionner est de lancer une nouvelle fenêtre cmd à partir de ma propre fenêtre de configuration. par exemple:

 @echo off echo Loading... setlocal enabledelayedexpansion call 1.cmd call 2.bat ... ... if "%LocalAppData%"=="" set LocalAppData=%UserProfile%\Local Settings\Application Data SET BLAHNAME=FILE:%LocalAppData%\BLAH call blah blah cmd 

La dernière cmd lancera une nouvelle invite cmd avec les parameters souhaités exportés vers la fenêtre de commande.

Voici une solution pour certains cas d’utilisation limités. Vous pouvez lire un fichier de commandes et les exécuter en ligne. Par exemple, le fichier de commande appelant ressemble à:

 echo OFF SETLOCAL ENABLEDELAYEDEXPANSION : echo. ---------------- echo. set-up java echo. ---------------- echo. rem call %DEV_SCRIPTS%\setup-java for /F "tokens=*" %%A in ( %DEV_SCRIPTS%\setup-java.bat ) do ( %%A ) call %DEV_SCRIPTS%\show-java : 

Dans le fichier setup-java.bat , vous ne pouvez pas utiliser % expansion. Vous devez utiliser ! ; par exemple:

  set JRE_HOME=!JRE_08! rem set JRE_TARGET=!JRE_HOME! 

Vous êtes donc littéralement en train de générer des commandes à partir d’un fichier texte. Vous devrez tester quelles commandes proviennent de cette manière. Il a fallu quelques essais pour définir certaines variables d’environnement.

Je ne pense pas que nous puissions faire de la logique ou des boucles car le processeur de commandes parsing le fichier au début. Je suis juste d’avoir une solution simple pour réutiliser les choses partagées comme les définitions d’environnement. La plupart des autres choses n’auront pas besoin d’une commande source réelle ( j’espère ). Bonne chance.

L’exemple suivant vous aidera à résoudre votre problème.

env.bat Ce fichier sert à définir des variables. Son contenu est donné coup.

 set name="test3" 

test.bat Notre fichier batch principal.

 call env.bat call print.bat pause 

Maintenant, print.bat le fichier batch pour imprimer les variables. Son contenu ci-dessous

 echo %name% 

Par exemple pour définir VC # vars

 C:\Windows\System32\cmd.exe /k "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" 

Utilisez git bash pour windows, ça marche parfaitement!