Existe-t-il une commande source équivalente dans Windows CMD comme dans bash ou tcsh?
Je sais que dans le monde unix, si vous modifiez votre .de profil ou de .fichier cshrc, vous pouvez faire une source ~/.de profil ou de la source ~/.cshrc pour obtenir l'effet sur votre session actuelle. Si j'ai changé quelque chose dans la variable système sous Windows, Comment puis-je avoir un effet sur la session d'invite de commande en cours sans quitter la session d'invite de commande et ouvrir une autre session d'invite de commande?
8 réponses
Je crains que non, mais vous pouvez commencer à utiliser Powershell, qui prend en charge l'approvisionnement par points. Étant donné que la fenêtre powershell est vraiment basée sur cmd, toutes vos commandes dos continueront à fonctionner, et vous gagnerez de nouvelles puissances, beaucoup plus de puissance.
Dans l'invite de commande Windows habituelle (c.-à-d. cmd.exe), juste en utilisant call mybat.bat
a fait ce que je voulais. J'ai toutes les variables d'environnement qu'il avait définies.
Le shell dos prendra en charge .Fichiers bat contenant uniquement des affectations à des variables qui, lorsqu'elles sont 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 dont j'ai trouvé cela pour 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
Le Dernier cmd lancera une nouvelle invite cmd avec les paramètres souhaités exportés vers la fenêtre de commande.
Voici une solution de contournement pour certains cas d'utilisation limités. Vous pouvez lire dans 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
-ing commandes à partir d'un fichier texte. Vous devrez tester les commandes sourced de cette façon. Il a fallu quelques essais juste pour définir des variables d'environnement.
Je ne pense pas que nous puissions faire de la logique ou des boucles car le processeur de commande scanne le fichier au début. Je suis OK juste avoir une solution de contournement simple pour réutiliser des 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.
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 principal fichier de commandes.
call env.bat
call print.bat
pause
Maintenant print.bat
fichier batch pour imprimer les variables. Son contenu donné 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"