2016-05-15 23 views
-2

Ich habe versucht, ein einfaches Programm zu erstellen, das nach der Eingabe Ihren Namen anzeigt.Warum funktioniert diese Batchdatei nicht?

Nach ein paar Stunden zu versuchen, diese Batch-Datei auf einem Windows 10 und Windows 7 Computer zu arbeiten, kann ich immer noch nicht herausfinden, was das Problem ist. Nachdem Sie Ihre Antwort eingegeben haben, ob Sie bestätigen, dass dies Ihr Name ist, funktioniert es immer noch nicht.

Ich habe versucht zu debuggen, indem pause fast überall und es weiterhin nicht funktioniert.

Kann jemand bitte darauf hinweisen, was falsch ist? Vielen Dank.

Hier ist mein Code:

ECHO OFF 
setlocal 

COLOR A 
cls 
:getName 
ECHO test 
echo Please input name. 
set "name=" 
SET /P NAME= 
if not defined NAME goto getName 
ECHO %NAME%, is this correct? Y/N 
set /p 097= 
if %O97%==Y goto :begin 
set favvid=0 
set hack=0 
:b 
echo Input name 
set name= 
set /P name= 
echo %name%, correct? Y/N 
set 897= 
set /p 897= 
if %897%==N goto :c 
if %897%==Y goto :begin 
:c 
echo Input name 
set name= 
set /P name= 
echo %name%, correct? Y/N 
set 897= 
set /p 897= 
if %897%==N goto b 
if %897%==Y goto begin 
echo Name = %NAME% Is now your name. Too many attempts 
:begin 
echo Hello %Name% 
pause 

Antwort

1

Avoid starting variable names with a number, dies wird die Variable vermeiden misinterpreted as a parameter sein:

%123_myvar% in einer Batch-Skript wird analysiert und dann als %1 23_myvar

ausgeführt

Für den Nachweis, Kraft echo ON.

Und verwenden (beachten Sie, dass variable erste Zeichen nichtChiffre Null ist aber BriefO.

set /p "O97=%name%, correct? Y/N " 
if "%O97%"=="Y" goto :begin 
rem note quoting in above commands 

Betrachten Sie die CHOICE command als Alternative zu SET /P mit (aber akzeptiert nur ein Zeichen/keypress)

1

Zwei Fehler auf den if Zeilen:

  1. Sie sollten keine Zahlen verwenden, um Variablen in einer Batch-Datei zu starten, da sie als Argumente interpretiert werden, die an die Batch-Datei übergeben werden. %0 ist die Batch-Datei selbst. %1 ist das erste, %8 ist das achte Argument usw. (Sie können echo --%0--%1--%097%-- in der Batch-Datei versuchen zu sehen, was zur Folge gibt es Ihnen.)

    Anstelle dieser if "%097%"=="Y" goto begin

    verwenden if "%Answer%"=="Y" goto begin

Jetzt beachten Sie auch, dass, während die Linie set /p 097=097 hat, wenn Sie Test für ihn in der nächsten Zeile mit %O97% Sie d o haben Sie kein 0 aber Sie haben den Buchstaben O. Dies führt dazu, dass Ihr Test jedes Mal fehlschlägt.

  1. Sie müssen die Zeichenfolge in Anführungszeichen gesetzt werden, etwa so:

    if "%Answer%"=="Y" goto begin

  2. Schließlich ist zu beachten, dass der Testfall empfindlich ist. Wenn der Benutzer also y drückt, wird dies als falsche Antwort interpretiert. Sie benötigen einen /I zu Ihrem Test hinzuzufügen:

    if/I"%Answer%"=="Y" goto begin

Ein weiterer Punkt. Nach der goto Sie Dickdarm einige Orte, einige Orte nicht, es ist fakultativ, aber es ist besser, es konsistent zu halten.

+1

'goto begin' und' goto: begin' sind die gleichen, ein Doppelpunkt ist fakultativ. Ich benutze Doppelpunkt konsequent; es hilft beim Finden von Etiketten und entsprechenden GOTOs zum Beispiel ... – JosefZ

+0

danke für den Fang. Aufsicht (ich änderte mich zusammen mit den anderen Fehlern, also dachte ich, dass beide das Ergebnis beeinflussen würden). Ich habe das korrigiert. – ib11

Verwandte Themen