3.9k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von the_fragger Einsteiger_in (7 Punkte)
Hallo an alle,

Habe mir ein DOS-Batch file kreiert. Leider funktioniert die 'Goto' funktion nicht richtig.
Wenn ich '1' drücke (sprich mit goto nach test springt) gibt er das Echo von dem Sprungpunkt 'erstellen' auch mit aus. Ist schon ewwig her das ich in DOS was gemacht habe.
Weiß jemand Rat ?

Gruß

Olli

Hier das Script:

@echo Off
cls
echo *********************
echo ****** Mach U *******
echo *********************
echo.
echo 1 - Eigenen Ordner definieren
echo.
echo.
echo 2 - A1
echo.
echo 3 - A2
echo.
echo 4 - A3
echo.
echo 5 - A4
echo.
echo 6 - A5
echo.
echo 7 - A6
echo.
echo 8 - A7
echo.
echo 9 - A8

set choice=
set/p choice=Bitte Auswaehle
if '%choice%'=='1' goto test
if '%choice%'=='2' goto erstellen
echo.

:test
echo Hallo

:erstellen
echo erstellen

7 Antworten

0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
er springt zu ":test" und tut alles, was danach folgt, auch wenn weitere sprungmarken gesetzt sind.

Du musst am Ende der Datei eine Sprungmarke wie zB ":Ende" setzen, und vor der Marke ":erstellen" ein "goto Ende" notieren.

alternativ kannst du vor ":erstellen" ein "goto :EOF" notieren, was bei entsprechenden Systemeinstellungen (normalerweise jedes Windows ab spätestens Win95 glaub ich) automatisch zum Ende der Datei springt.

Vielleicht willst Du auch vor der Marke ":test" ein entsprechendes Goto haben, damit ":test" nicht ausgeführt wird, wenn keine der Optionen gewählt wurde.
0 Punkte
Beantwortet von ch55 Experte (3.8k Punkte)
Hey Olli,

ist bei mir auch ewig her, hatte mal bei einer Batch ein ähnliches Problem. Glaube mich dunkel daran zu erinnenern, daß ich es gelöst habe indem ich die if Befehler in umgekehrter Reihenfolge aufgeführt habe, was dann so aussehen müsste


@echo Off
cls
echo *********************
echo ****** Mach U *******
echo *********************
echo.
echo 1 - Eigenen Ordner definieren
echo.
echo.
echo 2 - A1
echo.
echo 3 - A2
echo.
echo 4 - A3
echo.
echo 5 - A4
echo.
echo 6 - A5
echo.
echo 7 - A6
echo.
echo 8 - A7
echo.
echo 9 - A8

set choice=
set/p choice=Bitte Auswaehle
if '%choice%'=='2' goto erstellen
if '%choice%'=='1' goto test
echo.

:test
echo Hallo

:erstellen
echo erstellen

Wie gesagt bin mir nicht ganz sicher, liegt alles im Dunkel der Erinnerung.

Probier´s mal aus, good luck.
0 Punkte
Beantwortet von zemmel Experte (3.2k Punkte)
Moin!

Antwort 1 ist gut...

@echo Off
cls
echo *********************
echo ****** Mach U *******
echo *********************
echo.
echo 1 - Eigenen Ordner definieren
echo.
echo.
echo 2 - A1
echo.
echo 3 - A2
echo.
echo 4 - A3
echo.
echo 5 - A4
echo.
echo 6 - A5
echo.
echo 7 - A6
echo.
echo 8 - A7
echo.
echo 9 - A8

set choice=
set/p choice=Bitte Auswaehlen
if '%choice%'=='1' goto test
if '%choice%'=='2' goto erstellen
echo.

:test
echo Hallo
echo
goto ende

:erstellen
echo erstellen
echo

:ende
pause


So funktioniert's.

Gruß

Klaus
0 Punkte
Beantwortet von
Oder etwas angepaßt:
@echo Off
cls
echo *********************
echo ****** Mach U *******
echo *********************
echo.
echo 1 - Eigenen Ordner definieren
echo.
echo.
echo 2 - A1
echo.
echo 3 - A2
echo.
echo 4 - A3
echo.
echo 5 - A4
echo.
echo 6 - A5
echo.
echo 7 - A6
echo.
echo 8 - A7
echo.
echo 9 - A8
echo.

set /p choice="Bitte Auswaehlen: "
goto %choice% 2>nul
goto :EOF
echo.

:1
echo Hallo
goto :EOF

:2
echo erstellen
goto :EOF

:3
echo usw.
goto :EOF

Das "goto %choice%" erspart die ganzen if's.
Und wenn man was anderes als die definierten Sprungmarken wählt, wird beendet.

Gruß, Winuser
0 Punkte
Beantwortet von kicia Mitglied (939 Punkte)
wozu ist das 2>nul ?
0 Punkte
Beantwortet von
Das "2>nul" leitet die Meldung "Das Sprungziel ... wurde nicht gefunden." beim Wählen einer nicht definierten Taste ins elektronische Nirvana um. Also eine "Kosmetik", um die störende Meldung zu unterdrücken.

Die 2 bezeichnet dabei die Standard-Error-Ausgabe (STDERR), das ">nul" die Umleitung zum Nul-Device (ins "Nichts").

Siehe auch support.microsoft.com/kb/110930/en-us

Gruß, Winuser
0 Punkte
Beantwortet von the_fragger Einsteiger_in (7 Punkte)
Einwandfrei ! Funktioniert ! Vielen Dank an Alle und auch für die Erklärungen *thumbs up*
...