Batch-Datei bei Sprungmarke innerhalb Batch aufrufen
Hallo,
da ich für ein längeres Skript teilweise auf eine andere Batch-Dateien wechseln muss, würde ich gerne wissen, wie man das genau bewerkstelligen kann.
Leider scheint mir der call-Befehl nicht weiterzuhelfen, da die andere Datei viel Code enthält und deshalb müsste diese bei einer gewissen Sprungmarke fortgesetzt werden.
Wie könnte ich das am besten tun? Zum Beispiel liegt die erste Datei bei I: (I:\Start.bat) und soll die Zieldatei auf C: (C:\Ziel.bat) aufrufen, jedoch nicht beim Anfang.
da ich für ein längeres Skript teilweise auf eine andere Batch-Dateien wechseln muss, würde ich gerne wissen, wie man das genau bewerkstelligen kann.
Leider scheint mir der call-Befehl nicht weiterzuhelfen, da die andere Datei viel Code enthält und deshalb müsste diese bei einer gewissen Sprungmarke fortgesetzt werden.
Wie könnte ich das am besten tun? Zum Beispiel liegt die erste Datei bei I: (I:\Start.bat) und soll die Zieldatei auf C: (C:\Ziel.bat) aufrufen, jedoch nicht beim Anfang.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 390909
Url: https://administrator.de/forum/batch-datei-bei-sprungmarke-innerhalb-batch-aufrufen-390909.html
Ausgedruckt am: 17.05.2025 um 15:05 Uhr
7 Kommentare
Neuester Kommentar
Übergib die Marke als Argument.
Bsp.:
a.bat
b.bat
Steffen
Bsp.:
a.bat
@echo off &setlocal
echo in %~nx0
call "b.bat" x
echo in %~nx0
call "b.bat" y
echo in %~nx0
pause
b.bat
if "%~1" neq "" call :%~1
exit /b
:x
echo label :x in %~nx0
exit /b
:y
echo label :y in %~nx0
exit /b
müsste diese bei einer gewissen Sprungmarke fortgesetzt werden
Fortsetzen geht natürlich nicht. Da aber der CALL Befehl dafür sorgt, dass b.bat imselben cmd.exe Prozess läuft wie a.bat, sollte das unerheblich sein.Steffen
call :label
ist nichtgoto label
Es ruft eine Subroutine auf, die mit
:label
beginnt und mit einem exit /b
oder goto :eof
endet.Danach wird der Programmablauf nach dem
call
Aufruf fortgesetzt. Verhält sich also genauso wie der Aufruf von Prozeduren in jeder anderen Sprache.Das
exit /b
(alternativ auch hier goto :eof
) nach dem call
Aufruf sorgt also dafür, dass die Ausführung des Batchscripts verlassen wird und ist somit notwendig.Was das
if "%~1" neq "" call :%~1
in Datei A zu suchen hat, erschließt sich mir nicht. Es gibt nicht einmal ein Label in diesem Code das angesprungen werden könnte.
Steffen
Argumente die du an ein Script übergibst, finden sich in den Parametervariablen %1 bis %9 wieder.
In deinem Fall übergibst du nur ein Argument, somit ist lediglich %1 interessant. Die Tilde in %~1 entfernt umschließende Anführungszeichen im Parameterwert, sofern es welche gibt.
Steffen
In deinem Fall übergibst du nur ein Argument, somit ist lediglich %1 interessant. Die Tilde in %~1 entfernt umschließende Anführungszeichen im Parameterwert, sofern es welche gibt.
if "%~1" neq ""
prüft also ob ein Argument übergeben wurde. Falls bspw. "label"
als Argument übergeben wurde, dann expandiert %~1 zu label
und das resultierende IF Statement wäreif "label" neq "" call :label
Steffen