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, 11552 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
JavaScript

AngularJS Variable über Input in Funktion ausführen

Frage von badkillaJavaScript

Hallo zusammen, hab seit gestern JS im Betrieb als Aufgabe bekommen, da ich noch nicht Berührung vorher damit hatte ...

Batch & Shell

Abfrage ob Variable leer ist

gelöst Frage von anmelderBatch & Shell2 Kommentare

Hallo, Wenn ich: eingebe wird ja ausgegeben. Wie lautet die Abfrage für: ? Man bräuchte so etwas wie NOTHING ...

Microsoft Office

Accsess SQL Abfrage als Variable in einer anderen Abfrage übergeben

Frage von Luna01Microsoft Office2 Kommentare

Guten Morgen, zu meinem Problem: ich habe mehrere (Haupt-) Abfragen, die ich über ein Kombinationsfeld KombiHauptabfrage aufrufe. qyrHaupt1, qyrHaupt2, ...

Windows Netzwerk

Powershell User in Netz abfragen

gelöst Frage von albin63Windows Netzwerk5 Kommentare

Hoi Zusammen Komme nicht weiter, mir fehlt noch die Anzeige des aktiven Username. Das Makro zeigt schön, welche Maschinenname ...

Neue Wissensbeiträge
Ausbildung

Linux-Ausstieg in Niedersachsen - Windows statt Bugfix

Information von StefanKittel vor 1 TagAusbildung10 Kommentare

Sind ja nur Steuergelder

Speicherkarten

Neuer Speicherkartentyp - zunächst nur für Huawei-Smartphones (künftig auch für Notebooks u. Tablets?)

Tipp von VGem-e vor 3 TagenSpeicherkarten3 Kommentare

Servus, als ob das "Chaos" i.S. Speicherkarten noch nicht groß genug wäre?! Evtl. kommt dieser neue Kartentyp bald auch ...

Sicherheit

Diverse D-Link-Router durch drei Schwachstellen kompromittierbar

Information von kgborn vor 3 TagenSicherheit

Hat jemand D-Link-Router in Verwendung? Einige Modelle sind sicherheitstechnisch offen wie ein Scheunentor. Äußerst unschöne Sache, aber nichts neues ...

Hardware

100.000 Mikrotik-Router ungefragt von Hacker abgesichert

Information von 7Gizmo7 vor 4 TagenHardware3 Kommentare

Hallo zusammen, da hier ja öfters mal von Mikrotik gesprochen wird. Trotz Updates klafft eine Sicherheitslücke in Hundertausenden Mikrotik-Routern. ...

Heiß diskutierte Inhalte
Vmware
Offene LDAP-Server in AS
gelöst Frage von obi-wan-kenobiVmware19 Kommentare

Hallo alle Miteinander, ich habe ein Problem, unsere VM-Ware Appliance (Version. 6.5.0.10000) ist scheinbar angreifbar. Wir haben eben die ...

Windows Server
Zertifikat RemoteDesktop hinterlegen
gelöst Frage von Green14Windows Server12 Kommentare

Hallo zusammen. ich habe mehrere Server (WinSrv 2016). Die Server sind in keiner Domäne und keine Terminalserver. Ich verbinde ...

Suche Projektpartner
Debian 9.5 32 Bit und PHP 7 Fehlerbeseitigungen
Frage von zeroblue2005Suche Projektpartner11 Kommentare

Hallo Zusammen, ich habe eine VM auf Basis von ESXI am laufen. Dieser wurde unter Debian 7 installiert mt ...

Windows 10
Windows 10 Spracherkennung - Eure Meinungen?
Frage von honeybeeWindows 1011 Kommentare

Hallo, wollte heute mal aus Neugier die Spracherkennung unter Windows 10 (Version 1803) ausprobieren und war mehr wie enttäuscht. ...