Frage von FreakyTag, 23

Batch-Programmierung Frage Anfänger?

Wie programmiert man es so, dass wenn man zB den Code hat: @echo off

echo Ist dies ein Test? echo [j]a, [n]ein set /P x=

if %x%==j goto teil1 if %x%==n goto teil2

:teil1

echo Die Antwort ist richtig!!! pause exit

:teil2

echo Leider Falsch :P!!! pause exit ------------------------------------------------- Ich möchte wenn ich zb den Befehl "j" eingebe , dass ich danach nochmal ein Befehl eingeben kann.. weil immer wenn ich "j" eingebe steht da die Nachricht, aber das Fenster schließt sich wenn ich eine weitere taste drücke?

Antwort
von JutenMorgen, 14

Mit Labels und GOTO Anweisungen bekommst du in Batch einfach Schleifen hin. 

:Label1
GOTO Label1

So kannst du so viele Befehle und Posts geben wie du möchtest.

Liebe Grüße, Juten Morgen!

Antwort
von MarkusGenervt, 7

Versuch das mal:

@echo off
setlocal enabledelayedexpansion

REM set x=j

:Abfrage
echo Ist dies ein Test?
set /P x="[j]a, [n]ein? "

if /i "!x!" == "j" (
call :teil1
) else (
call :teil2

)
if errorlevel 2 goto :eof
goto Abfrage

:teil1
echo Die Antwort ist richtig!!!
pause
goto :eof

:teil2
echo Leider Falsch :P!!!
pause
exit /b 2
goto :eof


Der zweite Befehl (SETLOCAL …) stellt sicher, dass alle lokalen Variablen auch nur lokal Bestand haben. Der Parameter ist in diesem Fall hier nicht nötig, aber er stellt sicher, dass z.B. Variablen-Setzungen innerhalb Schleifen (IF, FOR, etc.) auch außerhalb Bestand haben. (Nur für den Fall, dass Du sowas einplanst.)
SETLOCAL erfordert eine Zeichen-Änderung für Variablen: aus "%" wird "!".

In "SET /P" wird %x% nicht gleich dem angegebenen String gesetzt, aber dieser stellt den Prompt dar. Um %x% vorzudefinieren entferne einfach das REM. Damit wird "j" gleich bereits hinter dem Prompt ausgegeben. Dies könnte aber von Windows-Version zu Windows-Version unterschiedlich ausfallen.

Um immer wieder bei Eingabe von "j" zurück zur ersten Anzeige zu gelangen, ist die GOTO-Schleife erforderlich, wie JutenMorgen bereits gesagt hat..

"GOTO :EOF" geht an das Ende der Datei / des Skripts.

Der CALL-Befehl ruft die Batch selbst rekursiv auf, aber nur den Teil zw. ":LABEL" und "goto :eof", bzw. dem ersten Batch-Abbruch (es simuliert quasi eine Prozedur).
Eigentlich ist die aller letzte Zeile doppelt überflüssig, da im Vor-Befahl bereits ein EXIT angefordert wurde und die Datei ohnehin zu Ende ist. Es soll nur die Struktur verdeutlichen.

EXIT gibt hier den Fehlerwert "2" zurück, der mit "IF ERRORLEVEL n" abgefangen werden kann.

Dieses Skript wird bei Eingabe von "j" endlos weiter laufen.

Antwort
von timlg07, 3
also in Kurzform:
@echo off
:Anfang
cls
echo ist dies ein Test?
set /p "x=[j]a / [n]ein"
if /i %x%==j echo Die Antwort ist richtig! && pause
if /i %x%==n echo Leider Falsch :P!!! && pause
goto Anfang

wenn es bei "n" nicht weitergehen soll einfach nach dem pause noch ein "&& Exit"


Keine passende Antwort gefunden?

Fragen Sie die Community