Batch-Programmierung Frage Anfänger?

... komplette Frage anzeigen

3 Antworten

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 bewerten Vielen Dank für Deine Bewertung
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"


Antwort bewerten Vielen Dank für Deine Bewertung

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 bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?