batch datei input?
Hallo zusammen ich habe in meiner batch Datei folgendes input
_______________________________________
set/p input=
if /i %input%==1 goto starten1
if /i %input%==2 goto starten2
if /i %input%==3 goto starten3
if /i %input%==4 goto starten4
if /i %input%==5 goto starten5
if /i %input%==6 goto starten6
_______________________________________
wie kann ich es schaffen, sobald etwas anderes eingegeben wird, dass das Programm etwas ausführt z. B. sich schließt oder eine Fehlermeldung zurückgibt, ohne dass ich das Format des inputs ändern muss, sollte das nicht funktionieren bin ich für input-Sequenz alternativen offen
vielen Dank im voraus
hansi875
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
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