If-Anweisung in Windows-Batch-Datei
Habe ich fest auf diese dumme if-Anweisung, was ich auch Tue, ich Schaffe es nicht, die if-statment zu gehen, um den richtigen label.
- Schlagen 'y' funktioniert, cmd-prompt Stoppt beim START BEREITSTELLEN
- ABER, wenn ich der Typ 'n' cmd druckt, STARTEN Sie BEREITSTELLEN, geht dann zu Ende, anstatt direkt auf die cancel-label.
Können Sie helfen?
:getConfirmation
set /p confirmDeploy =Confirm deployment of code [y/n] ?:
if "%confirmDeploy%"=="y". goto deployCode
if "%confirmDeploy%"=="n". goto cancelDeploy
:deployCode
ECHO START DEPLOY
goto end
:cancelDeploy
ECHO DEPLOY CANCELLED
goto end
Seite Hinweis - ist die
Es ist definiert, vielen Dank für die Auskunft. Ich hatte zu verwenden : belore den label-Namen in der if-Anweisung für diese zu arbeiten.
end
label definiert? Oder haben Sie die Absicht goto :eof
(entspricht exit /b)Es ist definiert, vielen Dank für die Auskunft. Ich hatte zu verwenden : belore den label-Namen in der if-Anweisung für diese zu arbeiten.
InformationsquelleAutor c14kaa | 2012-03-27
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
if "%confirmDeploy%"=="y"
ist, sonst schlägt es mit einer leeren Eingabe-oder Sonderzeichen wie&|<space><TAB>
Beachten Sie auch, dass musste ich entfernen Sie die Leerzeichen nach dem "set /p confirmDeploy" wie @Bali hat in seinem Beispiel. Wenn ich Links den Raum, es würden nicht die Benutzer-Eingabe in meine variable.
InformationsquelleAutor Bali C
Wenn wir die Tatsache ignorieren, dass die erforderlichen Eingang "y". oder n. (wegen der . in der if-Vergleich), niemand bemerkt das EIGENTLICHE problem mit c14kaa Schrift (außer Nick DeVore aber nicht sagen warum). Das original-Skript hatte die Linie
set /p confirmDeploy =Bestätigen Sie die Bereitstellung von code [y/n] ?:
Nick erwähnt, dass dies nicht die Antwort in die variable. Das ist, weil es war putting die Antwort in "confirmDeploy" (das Leerzeichen ist Teil der name der variable, nur ein weiteres Faible von cmd input-parsing). Also wenn c14kaa verwendet %confirmDeploy%, es würde erweitert haben, um %confirmDeploy% (d.h. wurde wörtlich genommen), es sei denn, die variable gesetzt wurde, an anderer Stelle. Ich kann nur annehmen, dass c14kaa ausgeschaltet hatte echo, weil die Tatsache, dass confirmDeploy nicht ersetzen (oder enthalten etwas anderes als y oder n) hätte eine große Ahnung. Es hätte auch gezeigt, das problem mit dem . in der if-Anweisung.
Als für die anderen Vorschläge, mit "" um die Variablen (und damit notwendig in die entsprechende Zeichenfolge) wird bevorzugt zu stoppen syntax-Fehler, wenn die variable leer ist (Generierung der Aussage "wenn == y", was jeb mit "scheitern"), die : vor dem label-Namen in den goto ignoriert wird und es muss ein Leerzeichen nach dem /ich in John ' s version (auch wenn der if-Befehl ist nur eine option, einige Befehle haben viele, und Sie können zusammen gestellt werden, wie in "findstr /ivn -...", also der Platz markiert das Ende der Liste).
Die einzige andere Kommentar, den ich machen würde ist, dass c14kaa davon ausgegangen, dass der Benutzer geben Sie immer die korrekte Antwort (y oder n), weil sonst das Skript "fallen durch" in :deployCode Abschnitt (wahrscheinlich nicht die ideal-Standard-Verhalten). Dies erklärt auch die Reaktion, die dem Vorschlag von Matt (echo schlechten input). Da die Reaktion wurde in confirmDeploy<space> es bedeutete, dass beide tests (mit confirmDeploy ohne die Leerzeichen) gescheitert.
Unter all den oben verlässt uns mit Reny ' s version (mit einer Erläuterung Hinzugefügt).
InformationsquelleAutor Codemaster Bob
Du bist auf dem richtigen Weg, nur benötigt, um clean-up syntax-und teilungsfehler. Dies funktioniert:
InformationsquelleAutor Reny
Das problem ist, dass keiner von den tests arbeiten. Sie prüft, ob der Benutzer die Eingabe so etwas wie
y.
odern.
(aber ich glaube nicht, können Sie tatsächlich geben Sie alles, was passen).Versuchen mit:
Ich bin mit XP, ich weiß, das könnte einen Unterschied machen
Haben Sie bemerkt, die
if
Zeilen, die ich geschrieben werden nicht diejenigen, die Sie haben?Das sollte funktionieren, allerdings könnte es mehr Benutzer freundlich, wenn Sie fügen Sie die
/I
option, um die IF-Anweisungen. Auch, warum nicht einfach der Punkt von beiden Seiten?Vielen Dank für Eure Hilfe Mat, Bali C Beispiel für mich gearbeitet, entfernen Sie die Anführungszeichen und das hinzufügen : vor dem label-Namen!
InformationsquelleAutor Mat
versuchen Sie auch dies:
Das argument /I macht es groß-und Kleinschreibung.
InformationsquelleAutor John A