bei If abfrage in Batch mit Leertaste

WeserPlatsch

Newbie
Registriert
Apr. 2024
Beiträge
3
Moin moin,
ich bin neu hier und hoffe im richtigen Forum zu sein.
Mit Batchdateien habe ich bisher nicht viel zu tun gehabt und bin auf ein Problem gestoßen....

Wenn ich die Frage1 im unteren Skript mit der Leertaste beantworte (z.B. ein..zwei Leerschritte), schließt das Fenster nach der Bestätigung mit ENTER sofort. Das Skript soll aber solange zur Sprungmarke ":Frage1" laufen, bis ich "ja"; "nein" oder "n" eingegeben habe.
Kann mir da jemand helfen...
Gruß WeserPlatsch

@Echo off
color 9a
echo sollen alle Dateien wirklich gelöscht werden ???
echo schreibe: (ja / nein) und betätige mit ENTER

:Frage01
SET /p wahl=
if '%wahl%' == 'nein' goto Nein
if '%wahl%' == 'n' goto Nein
if '%wahl%' == 'ja' goto Ja
echo ich habe dich nicht verstanden. & goto Frage01
Pause

:Nein
echo du hast "nein" eingegeben
echo ich breche alles ab.
goto Ende

:Ja
echo du hast "ja" eingegeben
REM usw......
echo ich habe fertig
goto Ende

:Ende
echo.
echo ich sage T s c h ü ß
timeout /t 5 /nobreak >nul
exit
 
Code:
@Echo off
color 9a
echo Sollen alle Dateien wirklich gelöscht werden?
echo Schreibe: (ja / nein) und bestätige mit ENTER

:Frage01
SET /p wahl=
REM Entferne führende und endende Leerzeichen
set "wahl=%wahl: =%"
REM Überprüfe, ob die Eingabe leer ist
if "%wahl%" == "" (
    echo Bitte gib eine gültige Antwort ein.
    goto Frage01
)
if /I "%wahl%" == "nein" goto Nein
if /I "%wahl%" == "n" goto Nein
if /I "%wahl%" == "ja" goto Ja
echo Ich habe dich nicht verstanden. & goto Frage01
Pause

:Nein
echo Du hast "nein" eingegeben.
echo Ich breche alles ab.
goto Ende

:Ja
echo Du hast "ja" eingegeben.
REM Hier kommen weitere Anweisungen für den Fall "ja"
echo Ich bin fertig.
goto Ende

:Ende
echo.
echo Ich sage Tschüss.
timeout /t 5 /nobreak >nul
exit

Kann ich in der Praxis grad nicht testen, aber probier es mal so.
 
Moin Mr. Smith,
vielen Dank für deine schnelle Antwort.
1) Das Skript bleibt in Zeile 7 stehen und wartet auf meine Antwort.
2) ich gebe Leerzeich. ein + ENTER
3) nun zeigt das Skript dein Echo von Zeile 12... an, ok.

4) Pos 2/3 kannst du unbegrenzt wiederholen... das funktioniert.
5) gebe ich aber bei Pos 2 nichts ein und betätige Enter, stürzt das Skript ab.

Es wurde für Bruchteile eine Sekunde folgendes angezeigt:...
"='" kann syntaktisch an dieser Stelle nicht verarbeitet werden.

Gleiches passiert auch, wenn nach dem echo in Zeile 4, nichts eingegeben wird und mit ENTER betätigt wird.
Kannst du dir dort einen Reim drauf machen?

Kann man bei Batchdateien, so wie in Excel-VBA ein Skript Zeile für Zeile ablaufen lassen, also zu Fuß durchgehen um zu sehen was bei jeder Zeile passiert?
 
Ich würde das ""-Problem bei den Prüfungen auf alte Art lösen:
if "%wahl%" == "" → if %wahl%! == !
Also das Einklammern in die Anführungszeichen (nominell richtig) durch nur 1 Zeichen, gerne das !, ersetzen.

CN8
 
Moin moin,
mit cumulonimbus8 Gedankengängen komme ich nicht klar, verstehe ich nicht...... Code schreiben für Batchdateien ist für mich aber auch absolutes Neuland.... habe bisher als Hobby nur Excel-VBA gemacht.

Habe das Problem aber jetzt gelöst....in dem ich dem Skript von Mr. Smith (siehe unten) die Zeile 7 hinzugefügt habe und somit der Variablen "wahl" schon den Wert "nein" vorgegeben habe.....
Code:
@Echo off
color 9a
echo Sollen alle Dateien wirklich gelöscht werden?
echo Schreibe: (ja / nein) und bestätige mit ENTER

:Frage01
Set wahl= nein
SET /p wahl=
REM Entferne führende und endende Leerzeichen
set "wahl=%wahl: =%"
REM Überprüfe, ob die Eingabe leer ist
if "%wahl%" == "" (
    echo Bitte gib eine gültige Antwort ein.
    goto Frage01
)
if /I "%wahl%" == "nein" goto Nein
if /I "%wahl%" == "n" goto Nein
if /I "%wahl%" == "ja" goto Ja
echo Ich habe dich nicht verstanden. & goto Frage01
Pause

:Nein
echo Du hast "nein" eingegeben.
echo Ich breche alles ab.
goto Ende

:Ja
echo Du hast "ja" eingegeben.
REM Hier kommen weitere Anweisungen für den Fall "ja"
echo Ich bin fertig.
goto Ende

:Ende
echo.
echo Ich sage Tschüss.
timeout /t 5 /nobreak >nul
exit
...wenn ich jetzt nichts eingebe und sofort ENTER betätige, läuft das Skript zu den Abfragen mit einem "nein".
Vielen Dank allen Beteiligten
 
Also ersetzt SET /P Variable=Vorschlagstext nicht den Inhalt der vorher befüllten Variable (mit ‹Nichts›). War mir neu da ich diese Funktion kenne aber nicht brauche.

Früher war es Usus mit meinem !-Vorschlag übergebene Parameter
MeineBatch.Bat Eingabe
auf Anwesenheit zu prüfen. Dies Systemvariabe %1 entspricht dem ersten übergebenen Parameter:
IF %1!==! ECHO Leer
wurde erfüllt wenn ich MeineBatch ohne Paramter aufrufe. Die Anführungszeichen haben immer etwas Besonderes an sich.
Und vielleicht liegt der Hund auch hier begraben: «"%wahl%" == "nein"» muss als «"%wahl%"=="nein"» geschrieben werden, ohne die Leerzeichnen um die == herum.

CN8
 
bitte denke daran, dass VBA und VBS auf der Abschussliste stehen.

Ich würde mich nicht mehr mit Batch Scripten quälen

den Code in CoPilot eingegeben kommt dies heraus.
Ohne Gewähr.


PowerShell:
do {
    # Prompt the user for input and trim any leading or trailing whitespace
    $wahl = (Read-Host " ").Trim()

    switch ($wahl) {
        # Check if the input is null or empty
        { [string]::IsNullOrEmpty($wahl) } {
            Write-Host "Bitte gib eine gültige Antwort ein."
        }
        # Check if the input is 'nein' or 'n'
        { $wahl -ieq "nein" -or $wahl -ieq "n" } {
            Write-Host "Du hast 'nein' eingegeben. Ich breche alles ab."
            break
        }
        # Check if the input is 'ja'
        { $wahl -ieq "ja" } {
            Write-Host "Du hast 'ja' eingegeben. Ich bin fertig."
            break
        }
        # Default case if none of the above conditions are met
        default {
            Write-Host "Ich habe dich nicht verstanden."
        }
    }
} while ($true)

Write-Host "Ich sage Tschüss."
Start-Sleep -Seconds 5
 
Zuletzt bearbeitet: (Codeeränzung)
alQamar schrieb:
bitte denke daran, dass VBA und VBS auf der Abschussliste stehen.
ich würde mich nicht mehr mit Batch Scripten quälen
Wärest du so gut uns hier die Zusammenhang von VBA/VBS (dess Absägen seitens MS mir in der Tat missfällt) und reinem DOS/CMD-Batch aufzuzeigen? Das sind zwei Paar Schuhe.
(Bei dem PS-Code verzweifle ich zwischen Eleganz und Unlesbarkeit.)

CN8
 
"Wärest du so gut uns hier die Zusammenhang von VBA/VBS"
Danke für den Hinweis. Falscher Thread.

Ich habe die Kommentare hinzufügen lassen und die $_ ersetzt. Hilft dies beim Verständnis?
Man könnte anstelle von PowerShell Switch auf mit einige if/else arbeiten, ich finde es jedoch tatsächlich eleganter hier mit switch zu arbeiten, da es leichter zu warten / ergänzen ist, und einen Vorteil gegenüber Batchscripten herausstellt.
 
Selbst wenn ich nicht PS spreche - den Code kapiert habe ich schon; das ist das Gute bei so vielen Meta-Sprachen, dass man die Struktur verfolgen kann 👍
CN8
 
Zurück
Oben