Batch-Datei für die Schleife durch den Schalter-wie Argumente?
Ich versuche, eine Schleife durch die Argumente, dass ich mich übergeben, um eine batch-Datei. Basierend auf dem argument, ich möchte eine variable flag true oder false zur späteren Verwendung im Skript
Also mein Befehl ist, "myscript.Fledermaus /u /p /s"
Und mein code ist:
FOR /f %%a IN ("%*") DO (
IF /I "%%a"=="/u" SET UPDATE=Y
IF /I "%%a"=="/p" SET PRIMARY=Y
IF /I "%%a"=="/s" SET SECONDARY=Y
)
Funktioniert es nur, wenn ich ein einziges argument, was mir sagt, es ist immer die gesamte Liste der Argumente als ein einziges argument. Ich habe versucht, "delims= ", aber ohne Erfolg. Irgendwelche Gedanken zu bekommen jede spaced argument?
Was über das hinzufügen eines Werts zu einem der params?
myscript.Fledermaus /u /p /d TEST /s
:loop
IF "%~1"=="" GOTO cont
IF /I "%~1"=="/u" SET UPDATE=Y
IF /I "%~1"=="/p" SET PRIMARY=Y
IF /I "%~1"=="/s" SET SECONDARY=Y
IF /I "%~1"=="/d" SHIFT & SET DISTRO="%~1"
SHIFT & GOTO loop
:cont
Aber der Wechsel kommt, dass inline-mit der letzten, WENN nicht gar shift-nichts. DISTRIBUTION endet als "/d" anstelle von "TEST"
InformationsquelleAutor DssTrainer | 2011-03-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Könnten Sie Schleife über die Argumente, mit SHIFT, SPRINGEN und einen extra, WENN Sie überprüfen, wenn es keine weitere Parameter zu analysieren:
UPDATE (Adressierung der Fall, wenn ein parameter ein argument von seinen eigenen)
Die VERSCHIEBUNG in der IF-Anweisung, die überprüft
/d
funktioniert. Das Problem ist, dass die gesamte Zeile wird ausgewertet und auf einmal beide Instanzen von%~1
ersetzt mit dem gleichen Wert, der/d
an diesem Punkt.Also, grundsätzlich ist die Lösung in diesem Fall wäre die Ursache der interpreter auswerten der
SET DISTRO="%~1"
Teil getrennt von derIF /I "%~1"=="/d"
. Es können verschiedene Ansätze. Zum Beispiel, können Sie einfach bewegenSHIFT & SET DISTRO="%~1"
auf die nächste Zeile und überspringen Sie es, wenn%~1
ist nicht/d
:Andere Methode könnte sein, weisen Sie einen besonderen Wert (z.B. eine
?
)DISTRO
und Verschiebung, wenn/d
aufgetreten ist. Dann, auf der nächsten Zeile überprüfen, obDISTRO
hat, die besonderen Wert und setzen Sie ihn auf%~1
:InformationsquelleAutor Andriy M
Du bist nicht allzu weit Weg, auf Ihre original-Stück, und da mag ich nicht SPRINGEN Schleifen, ich dachte, ich würde post dies:
Dem Grund, es war nur das arbeiten mit einem parameter, der über die Verwendung der Zitate. Indem Sie %* zitiert man die gesamte Kommandozeile ein einzelnes token. außerdem ist die /F-Variante des FÜR ist nicht, was Sie suchen. Die Dokumentation von FOR /? sollte das helfen, die Sache aufzuklären.
InformationsquelleAutor MarbleMunkey