Ich weiß, dass Sie in der Unix-Welt, wenn Sie Ihre .profile- oder .cshrc-Datei bearbeiten, eine Quelle ~/.profile oder eine Quelle ~/.cshrc ausführen können, um die Auswirkungen auf Ihre aktuelle Sitzung zu erhalten. Wenn ich etwas an der Systemvariablen unter Windows geändert habe, wie kann ich dann die aktuelle Eingabeaufforderungssitzung ausführen, ohne die Eingabeaufforderungssitzung zu beenden und eine weitere Eingabeaufforderungssitzung zu öffnen?
Ich befürchte nicht, aber Sie können Powershell verwenden, das Dot Sourcing unterstützt. Da das Powershell-Fenster wirklich auf cmd basiert, funktionieren alle DOS-Befehle weiterhin, und Sie erhalten neue, viel mehr Power.
In der üblichen Windows-Eingabeaufforderung (d. H. Cmd.exe) hat nur call mybat.bat
das gemacht, was ich wollte. Ich habe alle Umgebungsvariablen erhalten, die es eingestellt hatte.
Die DOS-Shell unterstützt BAT-Dateien, die nur Zuweisungen zu Variablen enthalten, die bei ihrer Ausführung die Variablen in der aktuellen Umgebung erstellen.
c:> type EnvSetTest.bat
set TESTXYZ=XYZ
c:> .\EnvSetTest.bat
c:> set | find "TESTX"
TESTXYZ=XYZ
c:>
IHTH.
Das folgende Beispiel hilft Ihnen, Ihr Problem zu lösen.
env.bat
Diese Datei dient zum Setzen von Variablen. Sein Inhalt wird geblasen.
set name="test3"
test.bat
Unsere Hauptbatchdatei.
call env.bat
call print.bat
pause
Nun print.bat
Batchdatei zum Drucken von Variablen. Sein Inhalt ist unten angegeben
echo %name%
Die einzige Möglichkeit, die ich gefunden habe, ist das Starten eines neuen Cmd-Fensters aus meinem eigenen Konfigurationsfenster. z.B:
@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
Der letzte Befehl startet eine neue Eingabeaufforderung mit den gewünschten Einstellungen, die in das Befehlsfenster exportiert werden.
Hier ist ein Workaround für einige begrenzte Anwendungsfälle. Sie können eine Datei mit Befehlen einlesen und diese direkt ausführen. Die aufrufende Befehlsdatei sieht zum Beispiel so aus:
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
:
In der Datei setup-Java.bat
können Sie die Erweiterung %
nicht verwenden. Sie müssen !
verwenden. z.B.:
set JRE_HOME=!JRE_08!
rem
set JRE_TARGET=!JRE_HOME!
Sie sind also wörtlich source
- Befehle aus einer Textdatei. Sie müssen die Befehle sourced auf diese Weise testen. Es wurden einige Versuche benötigt, um einige Umgebungsvariablen festzulegen.
Ich glaube nicht, dass wir Logik oder Schleifen ausführen können, da der Befehlsprozessor die Datei beim Start durchsucht. Ich bin in Ordnung, ich habe nur eine einfache Problemumgehung, um freigegebene Dinge wie Umgebungsdefinitionen wiederzuverwenden. Für die meisten anderen Dinge ist kein source
-Befehl erforderlich ( ich hoffe ). Viel Glück.