Die kurze Antwort - verwenden Sie eckige Klammern:
if [%1]==[] goto :blank
oder (wenn Sie mit zitierten Argumenten umgehen müssen, siehe Bearbeiten unten):
if [%~1]==[] goto :blank
Warum? du könntest fragen. Nun, genau wie Jeremiah Willcock es erwähnt hat: http://ss64.com/nt/if.html - das benutzen sie! OK, aber was ist los mit den Zitaten?
Nochmals kurze Antwort: Sie sind "magisch" - manchmal werden doppelte (doppelte) Anführungszeichen in einfache (doppelte) Anführungszeichen umgewandelt. Und sie müssen zunächst einmal zusammenpassen.
Betrachten Sie dieses kleine Skript:
@rem argq.bat
@echo off
:loop
if "%1"=="" goto :done
echo %1
shift
goto :loop
:done
echo Done.
Testen wir es:
C:\> argq bla bla
bla
bla
Done.
Scheint zu funktionieren. Aber jetzt schalten wir in den zweiten Gang:
C:\> argq "bla bla"
bla""=="" was unexpected at this time.
Boom Dies wurde weder als wahr noch als falsch bewertet. Das Skript starb. Wenn Sie den Reaktor irgendwo auf der ganzen Linie ausschalten sollten, dann haben Sie Pech. Du wirst jetzt wie Harry Daghlian sterben.
Sie denken vielleicht - OK, die Argumente dürfen keine Anführungszeichen enthalten. Wenn ja, passiert dies. Falsch Hier ist ein Trost:
C:\> argq ""bla bla""
""bla
bla""
Done.
Oh ja. Keine Sorge - manchmal dies wird funktionieren.
Versuchen wir es mit einem anderen Skript:
@rem args.bat
@echo off
:loop
if [%1]==[] goto :done
echo %1
shift
goto :loop
:done
echo Done.
Sie können selbst testen, ob es in den oben genannten Fällen in Ordnung ist. Dies ist logisch - Anführungszeichen haben nichts mit Klammern zu tun, daher gibt es hier keine Magie. Aber was ist mit dem Aufpeppen der Argumente mit Klammern?
D:\>args ]bla bla[
]bla
bla[
Done.
D:\>args [bla bla]
[bla
bla]
Done.
Kein Glück da. Die Klammern können den cmd.exe
Parser einfach nicht ersticken .
Kehren wir für einen Moment zu den bösen Zitaten zurück. Das Problem war da, als das Argument mit einem Zitat endete:
D:\>argq "bla1 bla2"
bla2""=="" was unexpected at this time.
Was ist, wenn ich nur passiere:
D:\>argq bla2"
The syntax of the command is incorrect.
Das Skript wird überhaupt nicht ausgeführt. Gleiches gilt für args.bat
:
D:\>args bla2"
The syntax of the command is incorrect.
Aber was bekomme ich "
in einem solchen Fall , wenn die Anzahl der Zeichen "übereinstimmt" (dh - gerade ist):
D:\>args bla2" "bla3
bla2" "bla3
Done.
NICE - Ich hoffe, Sie haben etwas darüber gelernt, wie .bat
Dateien ihre Befehlszeilenargumente aufteilen (TIPP: * Es ist nicht genau wie in Bash). Das obige Argument enthält ein Leerzeichen. Die Anführungszeichen werden jedoch nicht automatisch entfernt.
Und argq? Wie reagiert es darauf? Vorhersehbar:
D:\>argq bla2" "bla3
"bla3"=="" was unexpected at this time.
Denken Sie also nach, bevor Sie sagen: "Wissen Sie was? Verwenden Sie einfach Anführungszeichen. [Für mich sieht das besser aus]".
Bearbeiten
Vor kurzem gab es Kommentare zu dieser Antwort - nun, quadratische Klammern können nicht damit umgehen, zitierte Argumente zu übergeben und sie so zu behandeln, als wären sie nicht zitiert.
Die Syntax:
if "%~1"=="" (...)
Ist keine neu gefundene Tugend der doppelten Anführungszeichen, sondern eine Anzeige eines ordentlichen Merkmals zum Entfernen von Anführungszeichen aus der Argumentvariablen, wenn das erste und letzte Zeichen ein doppeltes Anführungszeichen ist.
Diese "Technologie" funktioniert genauso gut mit eckigen Klammern:
if [%~1]==[] (...)
Es war nützlich, darauf hinzuweisen, deshalb stimme ich auch der neuen Antwort zu.
Schließlich, Fans von doppelten Zitaten, gibt ""
es in Ihrem Buch ein Argument für das Formular , oder ist es leer? Frage nur' ;)
GOTO BLANK
den beiden anderenIF
Anweisungen Klammern (wie in der Zeile) hinzufügen , wird das Problem dadurch behoben?