Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Abfrage von Variable (User-Input)

Mitglied: -heny-

-heny- (Level 1) - Jetzt verbinden

04.03.2008, aktualisiert 06.03.2008, 11749 Aufrufe, 4 Kommentare

Hallo,

ich habe ein kleines Problem mit einem Skript, welches den User erst einer Variable einen Wert zuweisen lässt (SET /p) und diesen daraufhin abfragt. Je nach Usereingabe sollen unterschiedliche Aktionen durchgeführt werden.

Beispiel #1 (funktioniert problemlos)
01.
        :settingsmenu
02.
        set /p menupoint=!%lang%inputmenupoint!
03.
        if "%menupoint%"=="1" goto languagemenu
04.
        if "%menupoint%"=="2" goto teamnamesmenu
05.
        if "%menupoint%"=="3" goto leaguelabelsmenu
06.
        if /i "%menupoint%"=="B" goto mainmenu
07.
        echo.
08.
        echo !%lang%invalidinput!
09.
        echo.
10.
        pause
11.
        goto settingsmenu
Im ersten Beispiel funktioniert alles so, wie ich es möchte. Weist der User der Variable den Wert "1" zu, so geht es zur Sprungmarke "languagemenu", bei "2" zu "teamnamesmenu", bei "3" zu "leaguelabelsmenu" und bei "B" zur Sprungmarke "mainmenu". Wird ein anderer Wert bei der Userabfrage eingegeben, so wird dem User auf dem Bildschirm mitgeteilt, dass er eine valide Eingabe zu machen hat. Auch beim Wert "", also einer leeren Eingabe, wird die Sprungmarke "settingsmenu" samt Fehlermeldung (s. echo's) aufgerufen.

Beispiel #2 (funktioniert nicht komplett)
01.
        set /p menupoint=!%lang%inputmenupoint!
02.
        if "%menupoint%"=="1" (
03.
            call :editcfgline settings.cfg 6 lang=leng
04.
            goto languagemenu
05.
        )
06.
        if "%menupoint%"=="2" (
07.
            call :editcfgline settings.cfg 6 lang=lger
08.
            goto languagemenu
09.
        )
10.
        if /i "%menupoint%"=="B" goto settingsmenu
11.
        echo.
12.
        echo !%lang%invalidinput!
13.
        echo.
14.
        pause
15.
        goto languagemenu
Im zweiten Beispiel funktioniert der erste Teil auch problemlos. Bei einer Eingabe von "1" führt er den Inhalt der Bedingungsgruppierung durch, ebenso bei der Zuweisung "2". Die Eingabe von "B" resultiert, wie gewünscht, in einem Aufruf der Sprungmarke "settingsmenu". Gibt der User andere Buchstaben/Eingaben ein, so wird die Fehlermeldung auf dem Bildschirm angezeigt und die Sprungmarke "languagemenu" aufgerufen. So weit, so gut. Weist der User der Variable allerdings keinen Inhalt zu, also "", so reagiert das Skript mit einem Aufruf der Sprungmarke "languagemenu", allerdings ohne Ausgabe der Fehlermeldung (s. echo's). Entferne ich die beiden If-Gruppierungen aus dem Skript, so funktioniert alles tadellos.

Woran liegt dies? Verzögerte Erweiterungen sind in der Batch-Datei natürlich aktiviert, wobei die !%lang%xyz!-Variablen eingelesene Strings aus einer Textdatei repräsentieren.

Gruß,
heny
Mitglied: -heny-
05.03.2008 um 01:32 Uhr
Wie ich herausgefunden habe scheint das Problem damit zusammenzuhängen, dass die Befehle der IF-Abfragen IMMER ausgeführt werden, egal ob die Bedingung zutrifft oder nicht. Es scheint daran zu liegen, dass die Variable nicht definiert ist, wenn man ihr "" zuweist. Warum dann die Befehle innerhalb der IF-Gruppierungen dennoch ausgeführt werden ist mir nicht ersichtlich.

Einen Workaround kann man schaffen, indem man die Variable vor der Userabfrage vordefiniert, z.B.:

01.
        set menupoint=UNDEFINED
02.
        set /p menupoint=!%lang%inputmenupoint!
Gruß,
heny
Bitte warten ..
Mitglied: Biber
05.03.2008 um 12:48 Uhr
Hmm, -heny-,

Woran liegt dies? Verzögerte Erweiterungen sind in der Batch-Datei natürlich aktiviert, ...

Vielleicht ist das das Problem.
Hast Du evtl diese Batch-Datei über eine weitere Instanz der CMD.exe mit "cmd /v:on dieseBatch.bat" aufgerufen?

Anders gefragt: steht explizit ein "...setlocal EnableDelayedExpansion" am Anfang der Batchdatei?

Grüße
Biber
Bitte warten ..
Mitglied: -heny-
05.03.2008 um 17:33 Uhr
Ich habe nun probiert, die Batch-Datei mit ausgeschalteten verzögerten Erweiterungen laufen zu lassen. Dies resultiert im gleichen Verhalten.

01.
[...]
02.
    setlocal EnableDelayedExpansion
03.
[...]
Ich nutze obigen Befehl nicht in der ersten Zeile (also z.B. "@echo off & setlocal EnableDelayedExpansion"), sondern erst ein paar Zeilen später. Das hat aber keine Auswirkungen, da vorher nur Kommentare stehen.

Gruß,
heny
Bitte warten ..
Mitglied: Biber
06.03.2008 um 07:38 Uhr
Moin -heny-,

kann so auch die Fehlerursache nicht erkennen.
Wenn Du willst, dann sende mal den Batchschnipsel im Original an meine im Profil angegebene Mailaddresse.

Grüße
Biber
Bitte warten ..
Ähnliche Inhalte
Switche und Hubs
Switch mit PoE-Input
gelöst Frage von Fenris14Switche und Hubs11 Kommentare

Guten Tag, ich bin derzeit auf der Suche nach einem Switch der über PoE mit Strom versorgt wird und ...

Entwicklung
Input Text öffnet div tag
gelöst Frage von jochengEntwicklung22 Kommentare

Hallo Leute Ich suche nach einem ganz einfachen weg ein Div durch ein <input type text zu öffnen (nur ...

C und C++

Arduino "Serial input zu analogwrite"

Frage von Zerou24C und C++1 Kommentar

Ist es möglich input vom serial monitor in analog write zu packen ? Ich möchte eine rgb led kontrollieren ...

E-Business

EService für Rechnungsversand - verschiedene Input- und Outputformate

gelöst Frage von ExcaliburxE-Business1 Kommentar

Hallo Zusammen, bisher druckt der Kunde seine Rechnungen etc. noch selbstständig. Es geht um eine hohe 6-stellige Seitenzahl pro ...

Neue Wissensbeiträge
Windows 10

Windows 10 kann XPS erzeugen aber nicht anzeigen ????

Erfahrungsbericht von Deepsys vor 20 StundenWindows 10

Heute schickt mir ein Kollegen eine E-Mail mit einer XPS-Datei vom Kunden im Anhang und fragt wie er diese ...

Exchange Server

1und1 IONOS: Probleme beim Mailversand mit Exchange

Information von reksierp vor 1 TagExchange Server3 Kommentare

Hallo, seit Do, 17.1.19 etwa Mittags nimmt 1und1 IONOS keine Mails mehr über den Standard-Port SMTP 25 an. Nachdem ...

LAN, WAN, Wireless

Cisco Mikrotik VPN Standort Vernetzung mit dynamischem Routing

Anleitung von aqui vor 1 TagLAN, WAN, Wireless

1. Allgemeine Einleitung Das nachfolgende Tutorial ist eine Fortführung der hier bei Administrator.de schon bestehenden VPN Tutorials und beschreibt ...

Windows Mobile

Support für Windows Mobile endet im Dezember 2019

Information von transocean vor 3 TagenWindows Mobile1 Kommentar

Moin, Microsoft empfiehlt als Alternative den Umstieg auf iOS oder Android, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
Windows Server
MSSQL Backup in Form von .sql einspielen
Frage von janosch12Windows Server14 Kommentare

Guten Morgen, wir verwenden das Tool SQLandFTPBackup ( ) zum sichern einiger MSSQL Datenbanken. Nun sichert das Toll die ...

LAN, WAN, Wireless
Wo lässt sich das Gateway in der FRITZ!Box 7360 einstellen?
gelöst Frage von OssabowLAN, WAN, Wireless13 Kommentare

Hallo all, nach gründlicher Suche scheine ich der einzige zu sein der das Problem hat (macht micht schon mal ...

Microsoft Office
Office 2016 oder Office 2019
Frage von PeterzMicrosoft Office13 Kommentare

Hallo zusammen, wir müssen unser Office von 2010 auf eine neuere Version Umstellen. Jetzt stellt sich die Frage, ob ...

Windows Server
"Konfiguration des Remotedesktop-Sitzungshosts" unter Windows 2016
gelöst Frage von emeriksWindows Server12 Kommentare

Hi, unter Windows 2008 R2 gab es noch eine MMC "Konfiguration des Remotedesktop-Sitzungshosts". Da kann man. u.a. die Konfiguration ...