hipfzwirgel
Goto Top

Benutzereingabe innerhalb If-Else Statement

Ich möchte in einer Batchdatei zunächst abfragen ob eine exe-Datei gestartet werden soll:

set /p value=Sollen die Dateien zuerst erneuert werden (J oder N): 

if /i "%value%" == "J" (   
    
OrdnerAbfrage D oder B 

) else (
    
andere Aktion

)

Wenn ja, muss ich die Exe-Datei mit Commandline Parameter für den zu kopierenden Ordner aufrufen.

Dazu wollte ich in der Zeile "OrdnerAbfrage D oder B" eigentlich ein set /p =Ordnername angeben (d oder b):
ausführen. Aber da crasht die Batch!

Kann mir jemand einen Tipp geben wie ich das hinbekomme?

Content-Key: 11240477835

Url: https://administrator.de/contentid/11240477835

Printed on: May 3, 2024 at 16:05 o'clock

Member: accessViolation
accessViolation Apr 23, 2024 updated at 16:25:31 (UTC)
Goto Top
Fixed ChatGPT-Vorschlag.
@echo off
setlocal enabledelayedexpansion

:askForInput
set /p value=Sollen die Dateien zuerst erneuert werden (J oder N): 
if /i "%value%" == "J" (  
    goto checkFolder
) else if /i "%value%" == "N" (  
    echo Andere Aktion ausführen, da die Dateien nicht erneuert werden sollen.
    goto end
) else (
    echo Ungültige Eingabe. Bitte geben Sie entweder "J" oder "N" ein.  
    goto askForInput
)

:checkFolder
set /p ordnername=Bitte geben Sie den Zielordner an (D oder B): 
if /i "%ordnername%" == "D" (  
    start "" "DeinProgramm.exe" /ParameterFuerOrdnerD  
) else if /i "%ordnername%" == "B" (  
    start "" "DeinProgramm.exe" /ParameterFuerOrdnerB  
) else (
    echo Ungültige Eingabe für den Ordnername.
    goto checkFolder
)

:end
Member: TK1987
TK1987 Apr 24, 2024 at 14:02:25 (UTC)
Goto Top
Moin,

Discussion guidelines - The rules for our content

Dazu wollte ich in der Zeile "OrdnerAbfrage D oder B" eigentlich ein set /p =Ordnername angeben (d oder b):
ausführen. Aber da crasht die Batch!

Kann mir jemand einen Tipp geben wie ich das hinbekomme?
Entweder die Klammen mit Zirkumflex escapen...
if /i "%value%" == "J" (     
  set /p =Ordnername angeben ^(d oder b^):
)
oder alles hinter dem Gleichzeichen in Doublequotes setzen, um es als Text zu deklarieren
if /i "%value%" == "J" (     
  set /p ="Ordnername angeben (d oder b):"  
)

BTW: Ich würde hier choice anstelle von "set /p" verwenden. Das hat den Vorteil, dass der Nutzer wirklich nur die vorgegebenen Tasten und nicht alles mögliche eintippen kann...
@echo off
setlocal EnableDelayedExpansion

choice /c JN /m "Sollen die Dateien zuerst erneuert werden"  
if %ErrorLevel% equ 1 (
  choice /c BD /m "Ordnername angeben"  
  if !ErrorLevel! equ 1 (
    REM: Aktion bei B
  )
  if !ErrorLevel! equ 2 (
    REM: Aktion bei D
  )
)

Gruß Thomas