web-dev-qa-db-fra.com

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 créer une source ~/.profile ou 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 l'affecter à la session d'invite de commande en cours sans quitter la session d'invite de commande et en ouvrir une autre?

27
mart2001

Je crains que non, mais vous pouvez commencer à utiliser Powershell, qui prend en charge l’approvisionnement en points. Comme la fenêtre powershell est vraiment basée sur cmd, toutes vos commandes dos continueront de fonctionner, et vous obtiendrez une nouvelle puissance, beaucoup plus de puissance.

6
johnshen64

Dans l'invite de commande Windows habituelle (cmd.exe, par exemple), il suffit d'utiliser call mybat.bat pour faire ce que je voulais. J'ai eu toutes les variables d'environnement qu'il avait définies.

35
Eike

Le DOS Shell prendra en charge les fichiers .bat contenant uniquement des affectations à des 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.

12
shellter

Les exemples suivants vous aideront à 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 de commandes principal. 

call env.bat
call print.bat
pause

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

echo %name%
2
Fathah Rehman P

La seule manière pour que cela fonctionne 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 avec les paramètres souhaités exportés vers la fenêtre de commande.

1
Ajay Gautam

Voici une solution de contournementpour 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 l'extension %. Vous devez utiliser !; par exemple.:

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

Donc, vous êtes littéralement source- commande à partir d'un fichier texte. Vous devrez tester quelles commandes sourced de cette manière. Quelques essais ont été nécessaires 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 commande analyse le fichier au début. Je suis juste d'avoir une solution de contournement simple pour réutiliser des éléments partagés tels que 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.

0
will