Wie kann man mit Batch "call"-Parameter / Variablen übergeben und in der ausgeführten Datei einlesen?
Wenn's geht bitte mit Beispiel
3 Antworten
CALL kann auf zwei verschiedene Arten benutzt werden. Zum Einen um externe ausführbare Dateien aufzurufen und zum Anderen um einen Abschnitt innerhalb des Batch-Scripts wie eine Prozedur aufzurufen.
Der externe CALL-Befehl kann selbst eigentlich weg gelassen werden.
z.B. sind folgende Befehle gleich:
CALL notepad.exe MeinText.txt
notepad.exe MeinText.txt
Mit internen Variablen geht das natürlich auch (derselbe Befehl):
SET myVar=MeinText.txt
CALL notepad.exe %myVar%
Der interne CALL-Befehl kann aber nicht weggelassen werden und die Syntax ist auch ein wenig anders:
@echo off
SETLOCAL
SET myVar=MeinText.txt
CALL :mySection "%myVar%"
GOTO :eof
:mySection
CALL notepad.exe "%~1"
GOTO :eof
Hier wird wieder dieselbe Funktion aufgerufen, aber auf eine sehr strukturierte Art.
Der erste CALL-Befehl ruft die eigene Batch erneut auf (CALL "%~0") und springt aber gleich zu der definierten Sprungmarke ":mySection" – weshalb der Doppelpunkt unbedingt erforderlich ist – und beendet diesen Aufruf beim ersten EXIT-Befehl, der hierbei durch den Befehl "GOTO :eof" gleichbedeutend ersetzt wird.
Die Sprungmarke ":eof" ist intern vordefiniert, muss daher nicht angegeben werden und bedeutet "end of file", also "gehe zum Ende der Datei".
D.h., dass der erste CALL-Befehl zu :mySection springt, dann weiter läuft, bis zum letzten GOTO-Befehl, dann zurück nach dem ersten CALL-Befehl und dann also beim ersten GOTO-Befehl wieder weiter macht, bzw. hier das Script beendet.
Der erste "GOTO :eof"-Befehl ist erforderlich, da das Skript sonst einfach weiter laufen würde und den ":mySection"-Abschnitt erneut durchlaufen würde.
Anstatt "GOTO :eof" kann man beim internen CALL-Aufruf aber nicht
den EXIT-Befehl nehmen, da sonst das Script insgesamt – also auch der
Aufrufende Prozess – beendet werden würde. Hier muss man unterscheiden
zwischen dem CMD-internen EXIT und dem EXIT-Befehl.
Klingt aber nur auf den ersten Blick kompliziert ;)
Im Section-CALL werden die übergebenen Parameter ganz normal, wie bei einem Befehlszeilen-Aufruf abgefragt – also mit %1, %2, etc.
Noch Fragen? Gerne.
CLI:
some-command admin password
Script:
set arg1=%1
set arg2=%2
some-command /u %arg1% /p %arg2%
meinst du soetwas:
call irgendeinprogramm.exe param1 param2 "param 3"
vielleicht hilft dir das noch weiter: https://de.wikibooks.org/wiki/Batch-Programmierung:_Erweiterungen_unter_Windows_NT#.C3.9Cbergabeparameter