batch datei input?

2 Antworten

erstmal vorweg:

Batch hat sich ziemlich zickig, wenn es um unvorhersehbare Eingaben geht, deshalb sollte man die Variablenzuweisung von set/p und die zu vergleichenden Variablen möglichst in "Gänsefüßchen"("Quote") benutzten. ohne "Quotes" würden leere Eingaben ([Enter] oder Leerzeichen) oder die Sonderzeichen &|<> zum Absturz der Batch führen!

Da du ohnehin bei jedem Treffer wegspringst, kannst du einfach den Alternativcode dem Vergleichsbock folgen lassen.

:Abfrage
set/p "input=Gib was ein:"
if /i "%input%"=="1" goto starten1
if /i "%input%"=="2" goto starten2
if /i "%input%"=="3" goto starten3
  rem da alle definierten Eingaben wegspringen bleibt  nur noch das Unvorhersehbare übrig
echo  Du hast "%input%" eingegeben, damit kann ich nichts anfangen
goto :Abfrage

:starten1
echo ich bin 1
pause
exit /b

:starten2
echo ich bin 2
pause
exit /b

:starten3
echo ich bin 3
pause
exit /b

Wenn Du mit einem Auswahlmenü (mit der Eingabe eines Zeichens) entscheidest ist (statt set/p) Choice zu empfehlen:

choice lässt nur die vorgegebenen eingaben zu:

@echo off
echo [1]mach das     [2]tue jenes
echo [3]was anderes  [x]ende

choice /c 123x
if "%errorlevel%"=="1" goto starten1
if "%errorlevel%"=="2" goto starten2
if "%errorlevel%"=="3" goto starten3
if "%errorlevel%"=="4" goto exit

:exit
echo bye...
timeout 2
exit /b


:starten1
echo ich bin 1
pause
exit /b


:starten2
echo ich bin 2
pause
exit /b


:starten3
echo ich bin 3
pause
exit /b

Wenn ich Dir einen Guten Rat geben kann... Verwende Batch nur für sehr einfache Dinge, wenn es um unvorhersehbare Strings geht kann Batch extrem kompliziert werden.

Für komplexere Sachen und Stringverarbeitung sollte man Powershell verwenden.

obiges in Powershell:

demo.ps1

Write-Host 'Menu' -Foreground Yellow
Write-Host '
[1]mach das   [2]tue jenes
[3]was anderes [x]ende
' -fo green
Write-Host 'Triff Deine Wahl:' -fo darkmagenta

do
{
  $choice = [System.Console]::ReadKey($True).keychar; #lies eine Taste
  $ok = $choice -match '[123x]'; #hier zulässige Tasten !
  if (-not $ok) {[console]::beep(440,300)}; #mache einen Ton bei einer falschen Taste ,Zeile kann weg
} until ( $ok ); #wir bleiben solange hier bis eine der definierten Tasten gedrückt wird.
   
switch ($choice)
{
  '1' {'irgendwas 1...'}
  '2' {'irgendwas 2'}
  '3' {'irgendwas 3'}
  'x' {
    'bye...'
    sleep 2
    exit}
}
pause
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Ich kenne mich zwar nicht genau aus was du willst, aber wieso kein if Else dabei anwenden, normalerweise wird dabei ein switchcast verwendet aber das gibt es leider nicht bei CMD

Und es gibt in Batch Funktionen, die Syntax ist wie folgt

@echo off
rem Definieren der Funktion "hallo_welt"
:hallo_welt
echo Hallo, Welt!
goto :eof
rem Aufrufen der Funktion "hallo_welt"
call :hallo_welt
rem Hier geht das Programm weiter
echo Das Programm ist fertig.
pause