Wie greifen Sie unter Windows auf Argumente zu, die beim Ausführen einer Batchdatei übergeben wurden?
Nehmen wir zum Beispiel an, ich habe ein Programm mit dem Namen hello.bat
. hello -a
Wie kann ich meinem Programm bei der Eingabe über eine Windows-Befehlszeile mitteilen, dass dies -a
als Argument übergeben wurde?
windows
batch-file
cmd
parameters
arguments
Eine Person
quelle
quelle
Antworten:
Wie bereits erwähnt, kann auf Parameter, die über die Befehlszeile übergeben werden, in Batchdateien mit der Notation
%1
to zugegriffen werden%9
. Es gibt auch zwei andere Token, die Sie verwenden können:%0
ist der Name der ausführbaren Datei (Batchdatei), wie in der Befehlszeile angegeben .%*
sind alle in der Befehlszeile angegebenen Parameter - dies ist sehr nützlich, wenn Sie die Parameter an ein anderes Programm weiterleiten möchten.Neben dem einfachen Zugriff auf die Parameter sind auch viele wichtige Techniken zu beachten.
Überprüfen, ob ein Parameter übergeben wurde
Dies geschieht mit Konstrukten wie
IF "%~1"==""
, was genau dann zutrifft, wenn überhaupt keine Argumente übergeben wurden. Beachten Sie das Tilde-Zeichen, das dazu führt, dass umgebende Anführungszeichen aus dem Wert von entfernt werden%1
. Ohne Tilde erhalten Sie unerwartete Ergebnisse, wenn dieser Wert doppelte Anführungszeichen enthält, einschließlich der Möglichkeit von Syntaxfehlern.Umgang mit mehr als 9 Argumenten (oder einfach das Leben leichter machen)
Wenn Sie auf mehr als 9 Argumente zugreifen müssen, müssen Sie den Befehl verwenden
SHIFT
. Dieser Befehl verschiebt die Werte aller Argumente um eine Stelle, sodass%0
der Wert von%1
,%1
der Wert von%2
usw.%9
den Wert des zehnten Arguments (falls vorhanden) annimmt, das vor dem AufrufSHIFT
(enter) über keine Variable verfügbar war BefehlSHIFT /?
für weitere Optionen).SHIFT
Dies ist auch nützlich, wenn Sie Parameter einfach verarbeiten möchten, ohne dass sie in einer bestimmten Reihenfolge angezeigt werden müssen. Zum Beispiel kann ein Skript , um die Fahnen erkennt-a
und-b
in beliebiger Reihenfolge. Eine gute Möglichkeit, die Befehlszeile in solchen Fällen zu analysieren, istMit diesem Schema können Sie ziemlich komplexe Befehlszeilen analysieren, ohne verrückt zu werden.
Ersetzung von Chargenparametern
Für Parameter, die Dateinamen darstellen, bietet die Shell zahlreiche Funktionen für die Arbeit mit Dateien, auf die auf keine andere Weise zugegriffen werden kann. Auf diese Funktionalität wird mit Konstrukten zugegriffen, die mit beginnen
%~
.Verwenden Sie beispielsweise, um die Größe der als Argument übergebenen Datei zu ermitteln
Um den Pfad des Verzeichnisses abzurufen, von dem aus die Batchdatei gestartet wurde (sehr nützlich!), Können Sie verwenden
Sie können den gesamten Bereich dieser Funktionen anzeigen, indem Sie
CALL /?
die Eingabeaufforderung eingeben .quelle
"name=John"
wirdname John
während exe. Eine Problemumgehung besteht darin, mit einfachen Anführungszeichen zu umgeben,'"name=John"'
CALL /?
!? Hier habe ich die ganze Zeit mit Google rumgespielt.Verwenden von Parametern in Batchdateien:% 0 und% 9
Batch-Dateien können sich auf die Wörter beziehen, die als Parameter mit den Token übergeben wurden:
%0
to%9
.In der Befehlszeile übergebene Parameter müssen alphanumerische Zeichen sein und durch Leerzeichen getrennt sein. Da
%0
der Programmname so ist, wie er aufgerufen wurde, ist er unter DOS%0
für AUTOEXEC.BAT leer, wenn er beim Booten gestartet wird.Beispiel:
Fügen Sie den folgenden Befehl in eine Batchdatei mit dem Namen ein
mybatch.bat
:Das Aufrufen der Batch-Datei lautet wie folgt:
mybatch john billy
würde Folgendes ausgeben:Holen Sie sich mehr als 9 Parameter für eine Batch-Datei, verwenden Sie:% *
Der Percent Star-Token
%*
bedeutet "den Rest der Parameter". Sie können eine for-Schleife verwenden, um sie zu erfassen, wie hier definiert:http://www.robvanderwoude.com/parameters.php
Hinweise zu Trennzeichen für Stapelparameter
Einige Zeichen in den Befehlszeilenparametern werden von Batchdateien ignoriert, abhängig von der DOS-Version, ob sie "maskiert" sind oder nicht, und häufig abhängig von ihrer Position in der Befehlszeile:
quelle
Batch-Dateien übergeben den Text automatisch nach dem Programm, sofern es sich um Variablen handelt, denen sie zugewiesen werden sollen. Sie werden in der Reihenfolge übergeben, in der sie gesendet werden. zB% 1 ist die erste Zeichenfolge, die nach dem Aufruf des Programms usw. gesendet wird.
Wenn Sie Hello.bat haben und der Inhalt ist:
und Sie rufen den Batch-in-Befehl über auf
Sie sollten diese Nachricht zurückerhalten:
Hallo, APerson241, danke, dass Sie diese Batch-Datei ausgeführt haben (11.01.2013)
quelle
@ Jons
:parse
/:endparse
Schema ist ein großartiger Start, und er ist mir für den ersten Durchgang dankbar, aber wenn Sie glauben, dass das quälende Windows-Batch-System Sie so einfach davon abhalten würde ... nun, mein Freund, stehen Sie vor einem Schock. Ich habe den ganzen Tag mit dieser Teufelei verbracht, und nach vielen schmerzhaften Nachforschungen und Experimenten habe ich endlich etwas geschafft, das für einen realen Nutzen brauchbar ist.Nehmen wir an, wir möchten ein Dienstprogramm implementieren
foobar
. Es erfordert einen ersten Befehl. Es hat einen optionalen Parameter,--foo
der einen optionalen Wert annimmt (der natürlich kein anderer Parameter sein kann). Wenn der Wert fehlt, wird standardmäßig verwendetdefault
. Es hat auch einen optionalen Parameter,--bar
der einen erforderlichen Wert annimmt. Schließlich kann ein Flag--baz
ohne zulässigen Wert verwendet werden. Oh, und diese Parameter können in beliebiger Reihenfolge kommen.Mit anderen Worten, es sieht so aus:
Kompliziert? Nein, das scheint ziemlich typisch für echte Versorgungsunternehmen zu sein. (
git
jemand?)Hier ist ohne weiteres eine Lösung:
Ja, es ist wirklich so schlimm. Siehe meinen ähnlichen Beitrag unter https://stackoverflow.com/a/50653047/421049 , in dem ich genauer analysiere, was in der Logik vor sich geht und warum ich bestimmte Konstrukte verwendet habe.
Schrecklich. Das meiste musste ich heute lernen. Und es tat weh.
quelle
Verwenden Sie Variablen, dh die
.BAT
Variablen und rufen Sie%0
auf%9
quelle