117 Stimmen

Wie kann ich überprüfen, ob ein Argument definiert ist, wenn ich eine Stapeldatei starte/aufrufe?

Ich versuche, die folgende Validierungslogik in einer Stapeldatei zu verwenden, aber der "Verwendung"-Block wird nie ausgeführt, auch wenn kein Parameter an die Stapeldatei übergeben wird.

if ("%1"=="") goto usage

@echo Dies sollte nicht ausgeführt werden

@echo Erledigt.
goto :eof

:usage
@echo Verwendung: %0 
exit 1

Was mache ich falsch?

0 Stimmen

1 Stimmen

@double-beep - Die Frage hier (von daniel-fortunov) wurde zuerst gestellt, etwa ein Jahr bevor die Frage, auf die Sie sich beziehen, veröffentlicht wurde. Welches ist das (mögliche) Duplikat?

1 Stimmen

@KevinFegan, weil die andere Frage mehr Aufrufe und mehr Antworten hat.

1voto

Howard Rothenburg Punkte 1110
IF "%1"=="" GOTO :Weiter
.....
.....
:Weiter
IF "%1"=="" echo Kein Parameter angegeben

0 Stimmen

Dies stürzt ab für run.bat "a b"

0voto

codey Punkte 1

IF "%1"=="" wird fehlschlagen, alle Versionen davon werden unter bestimmten Poison-Character-Bedingungen scheitern. Nur IF DEFINED oder IF NOT DEFINED sind sicher

1 Stimmen

if [not] defined ... funktioniert nicht mit Parametern wie %1. Haben Sie ein Beispiel, wo if "%~1" ... nicht funktioniert?

0 Stimmen

Hier ist ein einfaches Beispiel für Code-Injektion. Erstellen Sie eine Datei namens unsafe.bat mit dem Inhalt if "%~1"=="" ( echo hello ). Führen Sie nun aus Powershell den folgenden Befehl aus .\unsafe.bat "_`" neq `"`" echo Pwned &::". Führen Sie auch dieselben Powershell-Argumente mit der Community-Antwort stackoverflow.com/a/34552964/1490584 aus. Sie werden feststellen, dass Batch-Argumente standardmäßig ziemlich unsicher sind.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X