butterblume
Goto Top

Menüauswahl

Menüauswahl in Batch ohne Choice

Hallo ich hab noch nicht soviel Ahnung davon, bin ein Lehrling. Da habe ich eine Menüauswahl mit Choice geschrieben. Nun möchte ich sie in eine ohne Choice umwandeln. Wie kann ich das tun?

Danke für eure Hilfe, Kristina

@echo off

:START
Echo.
Echo.
Echo Menu
Echo.
Echo.
Echo 1 - Explorer
Echo.
Echo 2 - Msn
Echo.
Echo 3 - Backup
Echo.
Echo 4 - Beenden
Echo.
REM zeigt das Menü an

set /p choice=Bitte treffe deine Auswahl_
REM eingabe der Variable

if %choice% == 1 goto EXPLORER
if %choice% == 2 goto MSN
if %choice% == 3 goto BACKUP
if %choice% == 4 goto QUIT
if not %choice* == 1 goto RESTART
if not %choice* == 2 goto RESTART
if not %choice* == 3 goto RESTART
if not %choice* == 4 goto RESTART
REM setzt die Bedinung und holt die Variable

:EXPLORER
explorer.exe
goto START
REM definiert die Variable

:MSN
C:\Programme\Messenger\msmsgs.exe
goto START
REM definiert die Variable

:BACKUP
backup.bat
goto START
REM definiert die Variable

:RESTART
set /p _ok=Falsche Eingabe! Bitte Treffe deine Auswahl!
goto START
REM definiert die Variable

:QUIT
exit
REM definiert die Variable

Content-Key: 51630

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

Printed on: April 18, 2024 at 03:04 o'clock

Mitglied: 11823
11823 Feb 14, 2007 at 08:54:14 (UTC)
Goto Top
Hallo Kristina,

choice ist nur der Name der Variable. Du kannst anstatt "choice" auch "auswahl" oder "pfannkuchen" nehmen.

Aber ein Tip:

Anstatt:

if %choice% == 1 goto EXPLORER
if %choice% == 2 goto MSN
if %choice% == 3 goto BACKUP
if %choice% == 4 goto QUIT
if not %choice* == 1 goto RESTART
if not %choice* == 2 goto RESTART
if not %choice* == 3 goto RESTART
if not %choice* == 4 goto RESTART

Kannst du auch

if %choice% == 1 goto EXPLORER
if %choice% == 2 goto MSN
if %choice% == 3 goto BACKUP
if %choice% == 4 goto QUIT
goto Restart


eintragen. Das Script prüft dann erst, ob die Variable auf eine Anweisung zutrifft, wenn nicht, dann springt es automatisch zum Restart. Somit sparst du dir die if not Befehle.

Gruß

Micha
Member: Phlegma
Phlegma Feb 14, 2007 at 17:41:27 (UTC)
Goto Top
hi,

es ist wahrscheinlich möglich das ganze auf wsh zu schreiben und dann bekommst du buttons ...
wenn du mich fragst dann fragst du da aber den falschen....

gruß, Ph
Member: Butterblume
Butterblume Feb 14, 2007 at 17:44:41 (UTC)
Goto Top
Mein Lehrmeister hat gesagt, dass es geht ohne den Befehl CHOICE aber eigentlich schon gleich und ohne Buttons...es muss die gleiche Ausgabe kommen...
Member: Phlegma
Phlegma Feb 14, 2007 at 18:00:18 (UTC)
Goto Top
hi,
was soll das sein? ich kenn nur 2 befehle in einer batch datei die anhalten und eine weitere eingabe brauchen bzw ermöglichen, und das ist ja zwingen notwenig für eine menüauswahl.
pause (>nul)
set /p (..)

ich weiß nicht wie dein lehrmeister sich das vorstellt ...

anderer tipp:
setz bei deinen if befehlen umschlie0ende zeichen auf beiden seiten der doppel gleichheitszeichen zur sicherheit, sonst kann es probleme geben wenn die variable nicht definiert ist.

if (%bla%)==(1) goto...
if [%bla%]==[1] goto...
if "%bla%"=="1" goto...

gruß, Ph
Member: Biber
Biber Feb 14, 2007 at 19:09:43 (UTC)
Goto Top
Moin Butterblume,

willkommen im Forum und Glückwunsch nachträglich zum Geburtstag.

Ich denke, bei der Aufgabe Deines "Lehrmeisters" (WTF ist ein Batch-Lehrmeister? So etwas wie ein Diplom-Klebeband-Abroller?) handelt es sich um ein Missverständnis.
Er ist bestimmt davon ausgegangen, dass Du das Menü bzw die Benutzerinteraktion mit dem unsäglichen "choice.com"-Utility zusammengekittet hast.
Dieses Teil hatte M$ mal mit Windows 3.x oder Win95 oder so unter das leicht zu begeisternde Volk gestreut... aber das Utitlity war selbst M$ zu peinlich und jetzt nicht mehr im Lieferumfang enthalten. AFAIK.

Und das richtige Werkzeug für so eine Benutzerabfrage ist schon, wie auch geschrieben wurde, der Set /p-Befehl.
Hast Du. Also -->Aufgabe fertig, alles prima.

Zu Micha-ITs Kommentar kann ich nur ergänzen, dass richtige Profis ihre Variablen "pancake" nennen und nicht "pfannkuchen".
[In VBS/WSH dann perverserweise wieder "strPancake" oder "cPancake", aber im Batch ist das egal]

Gruss
Biber
Member: Butterblume
Butterblume Feb 14, 2007 at 21:10:06 (UTC)
Goto Top
Hallo Biber,

Danke für die Gratulation...face-smile

Mein Lehrmeister hat den Befehl von Microsoft bekommen, selber wäre er auch nie draufgekommen...doch er hat sich überlegt, vielleicht schaffe ich das doch (hab erst gesetern damit angefangen, hab nicht wirklich Ahnung von Batch), er wäre eben sehr...hmm...zufrieden?
was auch immer, wollte trotzdem noch wissen ob es andere Möglichkeiten gibt. Ich habe auch schon Forums gesehen, wo jemand ihre Menü ohne choice schreiben möchten, weil bei XP geht das nicht.
Ich habe auch XP, habe nichts kopiert und es funktioniert trotzdem...keine Ahnung warum. Ohne choice.com

Liebe Grüsse, Kristina
Mitglied: 11823
11823 Feb 15, 2007 at 08:29:55 (UTC)
Goto Top
Hallo,

Du benötigst bei deinem Script kein coice.com, da du ja mit Variablen arbeitest.

Mit der Zeile "set /p choice=..." weist du der Variable choice (kann wie schon geschrieben einen anderen Namen haben) einen Wert zu, den er dann bei dir Nachfragt.

Dieser Befehl ist in XP schon integriert.


@Biber:

Nutzen Programmierer echt den Namen "pancake" als Name für eine Variable? Hatte "Pfannkuchen" eigentlich nur geschrieben, weil ich grad dran denken musste. ;)
Member: Biber
Biber Feb 15, 2007 at 09:50:04 (UTC)
Goto Top
@11823
Nutzen Programmierer echt den Namen "pancake" ..?

Keine Ahnung - ich hatte nur ein einziges Mal direkten Kontakt mit Programmierung.
Und das war 1992, als meine Tante Susi sich einen Videorekorder gekauft hat.
Aber in den Beispiel-Skripts in diesen Tankstellen-PC-Zeitschriften sind die Variablen meistens auf ausländisch.
Sieht auch irgendwie professioneller und teurer aus - führt dann aber zu solchen Missverständnissen wie oben mit dem "Menü ohne Choice".

@Butterblume

Lies bitte nochmal die bisherigen Antworten.
Es ist wirklich nur ein sprachliches Missverständnis.
Ersetze "%choice%" in Deinem Batch durch "%auswahl%", dann hast Du einen Batch ohne Choice.

Gruss
Biber
Member: Butterblume
Butterblume Feb 16, 2007 at 15:31:01 (UTC)
Goto Top
@Biber

Ok es funktioniert auch, ich habs auch verstanden wieso... du tust ja einfach ein beliebiges wort setzten...und holst es wieder...

Danke, aber ob man die datei wirklich braucht oder nicht, weiss ich immer noch nicht...
Member: Butterblume
Butterblume Feb 16, 2007 at 15:32:03 (UTC)
Goto Top
@Biber

Ok es funktioniert auch, ich habs auch verstanden wieso... du tust ja einfach ein beliebiges wort setzten...und holst es wieder...

Danke, aber ob man die datei wirklich braucht oder nicht, weiss ich immer noch nicht...

Ich denke zwar mein lehrmeister hat es andres gemeint, nicht wegen dem wort sondern allgemein eine andere technik zu benutzen...andere struktur...
Member: Biber
Biber Feb 16, 2007 at 16:01:14 (UTC)
Goto Top
Moin Butterblume,

...aber ob man die datei wirklich braucht oder nicht, weiss ich immer noch nicht...
Nein, die Choice.com wird nicht gebraucht.
Und, wie oben geschrieben, über die hat sogar M$ den Mantel des Schweigens gedeckt und unauffällig weggelassen seit Win2K.
Da kannst Du also davon ausgehen, dass dieses Utilitily nicht wirklich zu den Hilfsbringern gehörte.

Ich denke zwar mein lehrmeister hat es andres gemeint, nicht wegen dem wort sondern allgemein eine andere technik zu benutzen...andere struktur...

Tja, das glaube ich zwar nicht, aber warten wir doch, bis der ehrwürdige Meister aus seiner Meditation erwacht ist und diesen Thread gelesen hat.
Dann kann er Dich und uns alle, die wir vor Neugier fast vergehen, auf andere Wege zum Licht lenken.

Am besten noch heute, sonst bin ich das ganze Wochenende am Grübeln...

Dir auch ein schönes Wochenende
Biber
Member: Butterblume
Butterblume Feb 16, 2007 at 16:25:00 (UTC)
Goto Top
@Biber

auf seinem rechner kann man diese batch-datei nicht ausführen (gebrauchen), also eben er erkennt diesen befehl nicht...warum echt?
Member: Biber
Biber Feb 16, 2007 at 17:01:40 (UTC)
Goto Top
Moin Butterblume,

wenn sich diese Batchdatei auf seinem Rechner nicht ausführen, ist von den 24 möglichen Ursachen die wahrscheinlichste:
Ein/mehrere Befehle werden (von seiner Betriebssystemversion) noch nicht unterstützt.

Das wiederum kann eigentlich nur der "Set /P"-Befehl sein, den es erst seit WinNT/Win2000 (? *nicht sicher bin*) gibt.

Zweitwahrscheinlichste Ursache: Er hat ein "neueres" Betriebssystem als WinNT, aber bei ihm ist statt der "CMD.exe" die "Command.com" als Befehlsinterpreter eingestellt.
Kannst Du überprüfen, wenn Du ein Konsolenfenster geöffnet hast, mit "Set Comspec"
-- bei mir käme heraus:
set comspec
ComSpec=C:\WINDOWS\system32\cmd.exe

Wenn dem so sein sollte (also Prä-Windows-2000/Prä-CMD.exe-Umgebung), dann lässt sich in der Tat auch eine andere Technik anwenden...
Dann musstest Du statt (wie oben)
@echo off
:START
Echo.
Echo.
Echo Menu
Echo.
Echo.
Echo 1 - Explorer
Echo.
Echo 2 - Msn
Echo.
Echo 3 - Backup
Echo.
Echo 4 - Beenden
Echo.
REM zeigt das Menü an

set /p choice=Bitte treffe deine Auswahl_
REM eingabe der Variable

if %choice% == 1 goto EXPLORER
if %choice% == 2 goto MSN
if %choice% == 3 goto BACKUP
if %choice% == 4 goto QUIT
....
..Statt dessen schreiben:
REM -------- Menu.bat-------
@echo off
:START
Cls
Echo.
Echo.
Echo Menu
Echo.
Echo.
Echo 1 - Explorer
Echo.
Echo 2 - Msn
Echo.
Echo 3 - Backup
Echo.
Echo 4 - Beenden
Echo.
REM zeigt das Menü an

Und dann jeweils noch eine 1.bat, 2.bat, 3.bat... in Deinem Suchpfad anlegen:
REM ------1.bat
@echo off
explorer.exe 
Menu.bat
REM -------2.bat
@echo off
C:\Programme\Messenger\msmsgs.exe 
Menu.bat
usw.

Aber ist alles Spekulation - wenn ein Batch nicht läuft, dann sollte man/frau ihn halt langsamer laufen lassen, damit Zeit bleibt, die Fehlermeldungen zu lesen.
Dann lässt sich gezielter eingreifen.

Grüße
Biber
Member: Butterblume
Butterblume Feb 19, 2007 at 07:54:03 (UTC)
Goto Top
@Biber

ich schaue mal...er hat auch XP
Member: Butterblume
Butterblume Feb 19, 2007 at 09:03:21 (UTC)
Goto Top
ach...ich werde das Thema als gelöst markieren, es gibt wahrscheinlich nicht mehr viel Lösungen dazu.

@Biber

Irgednwie verstehe ich nicht ganz mit cls...bei mir funktionierts nicht...oder ich mache was falsch...
Mitglied: 11823
11823 Feb 19, 2007 at 10:08:32 (UTC)
Goto Top
Hi,

also wenn er XP hat, dann sollt dieses Script funktionieren.


@echo off

:START
CLS
Echo.
Echo.
Echo Menu
Echo.
Echo.
Echo 1 - Explorer
Echo.
Echo 2 - Msn
Echo.
Echo 3 - Backup
Echo.
Echo 4 - Beenden
Echo.

set /p choice=Bitte treffe deine Auswahl_

if %choice% == 1 goto Explorer
if %choice% == 2 goto MSN
if %choice% == 3 goto Backup
if %choice% == 4 goto Exit
goto Start


:Explorer
explorer.exe
goto START


:MSN
C:\Programme\Messenger\msmsgs.exe
goto START

:Backup
backup.bat
goto START


:Exit
exit

Ansonsten wäre es mal schön zu erfahren, wie dein "Lehrmeister" es gemacht hätte, würde mich dann doch zu sehr interessieren ;).

Gruß

Micha
Member: Phlegma
Phlegma Feb 19, 2007 at 11:59:57 (UTC)
Goto Top
hi,
Irgednwie verstehe ich nicht ganz mit
cls...bei mir funktionierts nicht...oder ich
mache was falsch...

cls löscht den inhalt der console

in diesem fall bewirkt das dass bei einer falschen auswahleingabe nicht 2 mal das menu angezeigt wird sondern das erste gelöscht und dann neu geschrieben wird.

Gruß, Ph
Member: Butterblume
Butterblume Feb 19, 2007 at 16:55:41 (UTC)
Goto Top
Ich bin echt erstaunt...
Meine Menüauswahl läuft bei ihm doch, ich weiss nicht warum er das gesagt hat aber ich habe selber gerade an seinem Rechner ausprobiert und es hat funktioniert...alle diese Versionen...
Hmm...entschuldigung, aber ich hab's selber nicht gewusst. Vielleicht hat er es ja extra gesagt damit ich was anderes herausfinde...
Wie auch immer...das was er mir eben gezeigt hat war ein Befehl für die "Eingabe" aber nicht mehr...wie er danach diese "Eingabe" auswählen will, weiss ich auch nicht.

Aber danke viel mal für eure Hilfe, hab echt was gelernt...hatte ja überhaupt keine Ahnung von dem...Null...
Und jetzt weiss ich schon mehr...

Lg, Kristina