Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

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
GELÖST

eine endlos schleife mit For in batch menü einbauen

Frage Entwicklung Batch & Shell

Mitglied: L4a-Thompson

L4a-Thompson (Level 1) - Jetzt verbinden

27.08.2005, aktualisiert 28.07.2006, 15755 Aufrufe, 6 Kommentare

01.
@echo off 
02.
Title Programm Center v3.0 Produced by Thompson 
03.
setlocal 
04.
:menue 
05.
cls 
06.
color 60 
07.
echo LAN-4-ALL Teamspeak Server (Channel Wahl) 
08.
echo ========================== 
09.
echo 1 Ruheraum  
10.
echo 2 Battlefield 2  
11.
echo 3 GOF - LTP 
12.
echo 4 Laberecke 
13.
echo 5 Eigener Testserver (Eingang) 
14.
echo. 
15.
echo -------------------------------------------------------------------------------- 
16.
echo Weitere Optionen ausfuehren 
17.
echo =========================== 
18.
echo iBackup, oodag Prozess Kill`n   (k) 
19.
echo alle Task Processe anzeigen     (t) 
20.
echo DFUE und Teamspeak channel(1-4) (d) ICQ und xFire starten automatisch 
21.
echo Antivir Guard Aktivieren?       (j) 
22.
echo "O&O" Defrag  Aktivieren        (a) 
23.
echo Manuelle Befehlseingabe         (cmd) 
24.
echo PC in XX Minuten (h)erunterfahren / Herunterfahren a(b)brechen / (n)eu starten 
25.
echo. 
26.
echo              =======================           ===================== 
27.
echo               PROGRAMM VERLASSEN: 0             Weitere Optionen: w 
28.
echo              =======================           ===================== 
29.
echo. 
30.
 
31.
set /p AuswahlEingabe=Aktion Auswaehlen:  
32.
 
33.
REM -------------------------------------------------------------------------------------------------------------- 
34.
For /F %AuswahlEingabe neq  IN (1 2 3 4 5 0 k t d1 d2 d3 d4 j a h b n cmd w) do goto menue 
35.
 
36.
if "%AuswahlEingabe%" equ "1" goto Ruheraum 
37.
if "%AuswahlEingabe%" equ "2" goto BF2 
38.
if "%AuswahlEingabe%" equ "3" goto GOF - LTP 
39.
if "%AuswahlEingabe%" equ "4" goto Laberecke 
40.
if "%AuswahlEingabe%" equ "0" goto EXIT 
41.
 
42.
 
43.
if "%AuswahlEingabe%" equ "5" goto Eigener 
44.
 
45.
 
46.
if "%AuswahlEingabe%" equ "k" goto Prozesse 
47.
if "%AuswahlEingabe%" equ "t" goto Task 
48.
if "%AuswahlEingabe%" equ "d1" call :DFUER 
49.
if "%AuswahlEingabe%" equ "d2" call :DFUEB 
50.
if "%AuswahlEingabe%" equ "d3" call :DFUEG 
51.
if "%AuswahlEingabe%" equ "d4" goto DFUEL 
52.
if "%AuswahlEingabe%" equ "j" goto Antivir 
53.
if "%AuswahlEingabe%" equ "a" goto defrag 
54.
if "%AuswahlEingabe%" equ "h" goto Herunterfahrer 
55.
if "%AuswahlEingabe%" equ "b" goto abbrechen 
56.
if "%AuswahlEingabe%" equ "n" goto neustart 
57.
if "%AuswahlEingabe%" equ "cmd" goto CMD 
58.
if "%AuswahlEingabe%" equ "w" goto menue2
also dast ist mein erstes menü wenn ich einfach enter drücke oder eine andere variable dann schließ sich die batch datei um dies zu verhindern möchte ich mit dem For string eine endlos schleife einbauen wenn nicht genau das gedrückt wir was ich zur verfügung stelle dann soll sie einfach zum menue zurück springen oder einen anderen befahl ausführen hab damit mal angefangen aber klappt nicht so ganz

was mach ich nun wieder falsch
Mitglied: Biber
27.08.2005 um 13:31 Uhr
Moin, L4A-Thompson,

sind nur Syntax-Fehler, keine Denkfehler..

For /F %AuswahlEingabe neq IN (1 2 3 4 5 0 k t d1 d2 d3 d4 j a h b n cmd w) do goto menue

1) FOR.. IN.. DO ist schon richtig, aber nicht mit Parameter /F.. der ist für Datei-Verarbeitung

2) und dann ist die Syntax sinngemäß...
FOR %%i in ( ....2 3 4 5..a b c...) DO was-auch-immer ..............mit einer Zählvariablen %%i
( Die kann auch %%a... %%z, %%A... %%Z und noch ein paar undokumentierte heißen, aber
IM BATCH IMMER mit ZWEI %-Zeichen (%%) )

3) und in dieses "was-auch-immer" gehört das "GOTO irgendwo"

4) aber erst, wenn Du alle Werte in der Liste/in der Klammer einmal verglichen hast ODER einen gültigen Wert gefunden hast. Ich würde die Logik an dieser Stelle umdrehen...
-> wenn gültige Eingabe --> gehe (springe zu) :weiter_BraverUser
-> wenn keine gültige Eingabe -> zurück zum Menu

also, alles zusammen:
01.
.. 
02.
FOR %%i  IN (1 2 3 4 5 0 k t d1 d2 d3 d4 j a h b n cmd w) DO IF /i  [%%i] EQU [%AuswahlEingabe%] goto Weiter_BraverUser 
03.
:DummUser  
04.
goto menue "wer nicht tippen kann, muss es lernen" 
05.
-------------- bissken Prosa 
06.
und in diese Zeile kommt niemand, hier kann ich alles an Kommentar unterbringen. 
07.
der Batch (und der User) können beide nur bei ":DummUser" oder bei ":weiter_BraverUser"  weiterlaufen.  
08.
Und ":DummUser" ist nur als eine Sprungmarke definiert, damit es keinen Syntaxfehler gibt. Könnte auch ein "Rem " davorstehen oder die Zeile ganz fehlen. 
09.
... und weiter gehts 
10.
 
11.
:weiter_BraverUser 
12.
... 
13.
... (wie bei Dir unter der For-Schleife)
HTH Biber
Bitte warten ..
Mitglied: L4a-Thompson
27.08.2005 um 14:10 Uhr
es geht leider nicht mit deinem
For string
werde aber auch noch weiter probieren wann ich es hinbekomme werde ich den fertigen string posten falls ich ihn mal vordir hinbekommen sollte *g

noch jemand andere vorschläge?
Bitte warten ..
Mitglied: mr.sebi-man
29.08.2005 um 10:50 Uhr
ruf doch einfach die batch - datei am ende wieder auf, damit musst du keine schleife einbauen, und zum beenden einfach ne neue sprungmarke, die nach dem neuaufruf läuft.
also z.B. so

Skript
skript.bat

:GOTO Exit
Rem hier bleibt einfach leer, d.h. das skript wird beendet.
Bitte warten ..
Mitglied: Biber
29.08.2005 um 11:06 Uhr
@mr. sebi-man

na., dann wäre es aber noch einfacher, das FOR..IN..DO..-Konstrukt ganz wegzulassen und nach den Verarbeitungszeilen ein "goto nachoben" zu schreiben:
....
if "%AuswahlEingabe%" equ "n" goto neustart
if "%AuswahlEingabe%" equ "cmd" goto CMD
if "%AuswahlEingabe%" equ "w" goto menue2

goto menue
Deine Variante ginge natürlich auch. Aber ich vermute, dass die "goto label"-Mimik vor ein paar Jahrzehnten in die damaligen DOS-Befehle eingebaut wurde, um genau das (Endlosschleife durch Sich-Selbst-Aufrufen) zu vermeiden.

Abgesehen davon bekommen wir sicherlich auch diese FOR..In..DO Schleife zum Fliegen, wenn wir uns richtig anstrengen.
Bitte warten ..
Mitglied: mr.sebi-man
29.08.2005 um 12:38 Uhr
@Biber
soviel ich weiß funktioniert das GOTO nur, wenn die Sprungmarke weiter unten ist, also ein Sprung nach oben nicht möglich ist.

Sicher ist die Schleifenlösung besser aber da kenn ich mich net so gut aus...
Bitte warten ..
Mitglied: Biber
29.08.2005 um 13:46 Uhr
@mr.sebi-man
Nein, GOTO funktioniert nicht nur nach unten. Bei jedem "GOTO Label" bzw "call :Label" durchsucht der CMD-Interpreter die gesamte *bat/*.cmd-Datei von oben angefangen bis zum Ende ab auf die Zeichenkette ":Label" am Zeilenanfang. War seit DOS 2.11 so. Seit neuestem liest der CMD-Interpreter von der Zeile an, in der er ein Goto findet bis unten, danach wieder vom Dateianfang aus.


( Anekdote dazu: zwischenzeitlich ist in WinXP mal ein neuer Bug reingekommen. Falls jemand versehentlich einen Label-Namen doppelt vergibt, sollte es nach meiner Aussage ja so sein, das immer das erste gefundene genommen wird. Syntaxfehler gibt es nie, weil die Suche ja in dieser Zeile mit einem "Gefunden" beendet wird.
Bsp.
01.
::...... LabelTest.Bat 
02.
@echo off 
03.
GOTO labelA 
04.
 
05.
:BACK_From_A 
06.
Echo Bin Bäck von LabelA 
07.
GOTO labelB 
08.
 
09.
:back_from_B 
10.
Echo Bin Bäck von LabelA und LabelB 
11.
goto ende 
12.
 
13.
[Raum für Notizen] 
14.
-- 
15.
:LabelA 
16.
echo Hallo, hier Label A - das Original 
17.
goto :Back_from_A 
18.
 
19.
:LabelB 
20.
echo Hallo, hier Label B  
21.
GOTO LabelA 
22.
 
23.
:LabelA 
24.
REM Das ist //eigentlich// unerreichbar...;-) 
25.
echo Hallo, hier Label A - das unerreichbare Duplikat 
26.
:ende
Bei WinXP wird folgndes erzeugt:
01.
>labeltest 
02.
Hallo, hier Label A - das Original 
03.
Bin Bäck von LabelA 
04.
Hallo, hier Label B 
05.
Hallo, hier Label A - das unerreichbare Duplikat
D.h. der CMD-Interpreter von XP sucht von der ZeileX+1 an, wenn er in ZeileX aufgerufen wird. Wenn er dann nichts findet, liest er noch mal die *.bat-Datei von oben an. Derselbe
*.bat liefert unter 98 / NT noch andere Ergebnisse *gg.
Aber, wie zu sehen ist, springt er auch munter zurück z.B. zu :back_from_A

*ende der Anekdote)
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Batch & Shell
gelöst Batch Problem bei einer For Schleife (2)

Frage von Juergen42 zum Thema Batch & Shell ...

Batch & Shell
Batch: Variable Expansion in einer FOR-Schleife (9)

Frage von .Sessl zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Probleme mit Dateipfaden in for-Schleife (1)

Frage von Jonas1806 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows Server
DHCP Server switchen (25)

Frage von M.Marz zum Thema Windows Server ...

SAN, NAS, DAS
gelöst HP-Proliant Microserver Betriebssystem (14)

Frage von Yannosch zum Thema SAN, NAS, DAS ...

Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

Windows 7
Verteillösung für IT-Raum benötigt (12)

Frage von TheM-Man zum Thema Windows 7 ...