(machen einige Vermutungen, wo Details aus Ihrer Frage fehlen)
In CMD, Wenn ein Stapelskript die Umgebung ändert, besteht das Standardverhalten darin, dass es die Umgebung des CMD-Prozesses ändert, der es ausführt.
Wenn Sie jetzt über ein Stapelscript verfügen, das ein anderes Stapelscript aufruft, gibt es drei Möglichkeiten.
die Batch-Datei direkt ausführen:
REM call q.bat
q.bat
REM this line never runs
Sie dies in der Regel nicht wollen, weil es an die aufrufende Batch-Skript nicht zurückkehren wird. Dies ist mehr wie goto
als gosub
. Der CMD-Prozess wechselt einfach von einem Skript zu einem anderen.
ausführen mit call
:
REM call q.bat
CALL q.bat
REM changes that q.bat affects will appear here.
Dies ist die häufigste Art und Weise für eine Batch-Datei eines anderen zu nennen. Wenn q.bat
beendet wird, kehrt die Steuerung zum Aufrufer zurück. Da dies derselbe CMD-Prozess ist, sind Änderungen an der Umgebung weiterhin vorhanden.
Hinweis: Wenn q.bat
die Anweisung EXIT
verwendet, kann der CMD-Prozess abgebrochen werden, ohne dass die Steuerung an das aufrufende Skript zurückgegeben wird.
Hinweis 2: Wenn q.bat
EXIT /B
verwendet, wird der CMD-Prozess nicht beendet. Dies ist nützlich für die Einstellung ERRORLEVEL
.
Führen Sie in einem neuen CMD-Prozess:.
REM call q.bat
CMD /C q.bat
REM environment changes in q.bat don't affect me
Seit q.bat Lauf einen neuen CMD-Prozess ins, wirkt sich die Umgebung dieses Prozesses und nicht das CMD, dass der Anrufer in läuft
Hinweis : Wenn q.bat
EXIT
verwendet, wird der Prozess des Aufrufers nicht beendet.
Der SETLOCAL
CMD Befehl wird eine neue Umgebung für das aktuelle Skript erstellen. Änderungen in dieser Umgebung haben keine Auswirkungen auf den Aufrufer. Im Allgemeinen ist SETLOCAL
eine gute Übung, um unkontrollierte Umgebungsänderungen zu vermeiden.
SETLOCAL
nutzen zu können, und schieben noch Umwelt Änderungen an den anrufenden Skript, mit dem Skript beenden:
ENDLOCAL && SET X=%X% && SET Y=%Y%
Dadurch werden die Werte von X und Y an die Mutter Umgebung schieben.
Wenn auf der anderen Seite Sie einen anderen Prozess ausgeführt werden soll (kein CMD-Skript) und haben es das aktuelle Skript Umwelt beeinflussen, als das Werkzeug eine Batch-Datei erzeugen, die die Änderungen macht Sie wollen, dann ausführen diese Batch-Datei.
REM q.exe will write %TEMP%\runme.cmd, which looks like:
REM set X=Y
q.exe
call "%TEMP%\runme.cmd"
Bitte geben Sie genau an, welche Shell Sie verwenden. CMD ist meine beste Vermutung, aber vielleicht meinst du PowerShell oder einen Windows-Port von CSH. –