littleflame
Goto Top

Batchscript mit Benutzereingabe - Variable überprüfen misslingt

Hallöchen liebe Administratorengemeinde.
Ich versuche gerade, mithilfe des Batch Workshops (Part II) von Biber ein Script zu bauen.
Leider scheitere ich und verstehe nicht warum.

Das Script soll je nach Benutzereingabe bestimmte IP-Adressen anpingen und die Erreichbarkeiten in ein Logfile schreiben.
Soweit ja verständlich.

Ich habe nun folgendes versucht, um die Benutzereingabe zu überprüfen.


Set /P NETZ="Welches Netzwerk ueberpruefen? (NETZ1 - NETZ6)"  
If /i %NETZ%=="NETZ1" set NETZ=NETZ1   
If /i %NETZ%=="NETZ2" set NETZ=NETZ2  
If /i %NETZ%=="NETZ3" set NETZ=NETZ3   
If /i %NETZ%=="NETZ4" set NETZ=NETZ4   
If /i %NETZ%=="NETZ5" set NETZ=NETZ5   
If /i %NETZ%=="NETZ6" set NETZ=NETZ6   
for %i in (NETZ1 NETZ2 NETZ3 NETZ4 NETZ5 NETZ6) do if (%NETZ%)==(%i) goto %NETZ%

Danach folgen natürlich die Abschnitte für die verschiedenen Netze.

In der letzten Zeile habe ich anscheinend irgendeinen Fehler, der zu folgender Ausgabe führt:

"NETZi)" ist syntaktisch an dieser Stelle nicht verarbeitbar.

Was genau ist mein Fehler?

Und eine zweite unwichtigere Frage: Lassen sich die Zeilen 2-7 ebenfalls noch sinnvoll in eine Schleife packen?


Vielen Dank im voraus,
LF

Content-ID: 171245

Url: https://administrator.de/forum/batchscript-mit-benutzereingabe-variable-ueberpruefen-misslingt-171245.html

Ausgedruckt am: 22.12.2024 um 18:12 Uhr

Skyemugen
Skyemugen 10.08.2011 um 10:32:48 Uhr
Goto Top
Aloha,

... vergleiche niemals Zollzeichen mit Luft.

%NETZ%=="NETZ1" Kann niemals passen.

Hoffe, das genügt dir als Gedankenblitz.

greetz André

edit: Ah, da war ja noch eine zweite Frage *gg* - gut, beantworten wir diese mit Ja und ziehen uns erst einmal frech grinsend zurück face-wink

P.S.: Was machst du, wenn eine falsche Eingabe erfolgt? face-wink

tja, das mit dem %i statt batchlike gedoppelt, überliest man auch mal
LittleFlame
LittleFlame 10.08.2011 um 10:41:51 Uhr
Goto Top
Hmmm... vielleicht verstehe ich nicht, was genau du meinst, aber sowohl
If /i %NETZ%=="NETZ1" set NETZ=NETZ1    

als auch

If /i %NETZ%==NETZ1 set NETZ=NETZ1  

tun das, was ich will.


Edit: Mist. Ich sollte meine Frage spezifizieren. Man frägst auch nicht "wissen Sie, wieviel Uhr es ist?", sondern "Entschuldigen Sie, wieviel Uhr ist es?" :-P
Kannst du mich bzgl dieser Schleife in die Richtige Richtung lotsen?
Ich weiss, dass ich dann mit ganz vielen % arbeiten muss, und da komm ich dann durcheinander face-big-smile

PS: Falls falsche Eingabe, dann ein echo mit "Falsche Eingabe und :eof"
Is ja nur n S(ch)nip-sel
bastla
bastla 10.08.2011 um 10:43:04 Uhr
Goto Top
... und noch als Anmerkung zur letzten Zeile: Wenn das Ganze ein Batch sein (werden face-wink) soll, wäre "%%i" anstelle von "%i" angebracht ...

Grüße
bastla
bastla
bastla 10.08.2011 um 10:44:36 Uhr
Goto Top
Hallo LittleFlame!

Wenn beide genannten Zeilen funktionieren, dann aber nur, weil jeweils unterschiedliche Eingaben erfolgen (im ersten Fall mit Anführungs-/"Zoll"-Zeichen, im zweiten Fall ohne) ...

Grüße
bastla
LittleFlame
LittleFlame 10.08.2011 um 10:48:56 Uhr
Goto Top
Irks... ok... bin schon still. Hab zumindest meinen Fehler bzgl. der "ZOLL"-Zeichen verstanden und verbessert.

Aber die Geschichte mit %%i verursacht

""NETZNETZ" ist syntaktisch an dieser Stelle nicht verarbeitbar."

face-confused
bastla
bastla 10.08.2011 um 10:56:59 Uhr
Goto Top
Hallo LittleFlame!

Ich würde auch nicht unbedingt zu Klammern als "Begrenzungszeichen" raten - bleibe einfach bei den "Zollzeichen" ...
Hinsichtlich der gefragten Schleife:
Wenn es nur darum ginge, jeweils ein
goto :gewähltesNetz
auszuführen, sollte sich das vielleicht so machen lassen:
if defined NETZ findstr /i /x ":%NETZ%" %0 >nul && goto :%NETZ%  
echo Falsche Eingabe
goto :eof
Die Idee dahinter: Durchsuche den aktuellen Batch (%0) nach einer Zeile ":gewähltesNetz" und, wenn gefunden, springe dort hin ...

Grüße
bastla
Skyemugen
Skyemugen 10.08.2011 um 11:00:43 Uhr
Goto Top
Aloha bastla,

(gut du bist noch am rumeditieren deines Codes, wie ich mehrfach bemerkt habe face-wink)

Warum goto :eof?
Warum nicht
:Eingabe
if...
echo Falsche Eingabe - zum Abbrechen STRG+C drücken
goto :Eingabe

Wer falsch tippt, darf noch einmal ^_^

greetz André

edit: @bastla, seit wann machen wir punktgenau das, was der TE möchte face-wink Dachte, wir weisen auf mögliche Optimierungen lieber hin ...
bastla
bastla 10.08.2011 um 11:07:50 Uhr
Goto Top
@Skyemugen
Warum goto :eof?
Wunsch des TE face-wink:
Falls falsche Eingabe, dann ein echo mit "Falsche Eingabe und :eof"

Grüße
bastla

[Edit]
Dachte, wir weisen auf mögliche Optimierungen lieber hin ...
Machst Du doch ohnehin ... face-wink

...wenngleich eine Optimierung für mich hieße, dass die Benutzer nur noch eine Zahl von 1 bis 6 (anstelle von "NETZ" + Zahl) eingeben müssten ...
[/Edit]
Skyemugen
Skyemugen 10.08.2011 um 11:09:23 Uhr
Goto Top
Aloha,

for %%i in (NETZ1 NETZ2 NETZ3 NETZ4 NETZ5 NETZ6) do if (%NETZ%)==(%%i) goto %NETZ% funktioniert einwandfrei auch wenn die Klammern ... nunja nicht das Wahre sind.

Noch als Hinweis: Setze Variablen komplett mit Inhalt in Zollzeichen, um die Leerzeichen am Ende-Problematik hier zu vermeiden, die unangenehme Nebenwirkungen hat face-wink außer bei NETZ2 existiert überall ein Leerzeichen dahinter, unschön, kann nicht funktionieren ^_^
set "Var=Inhalt"

greetz André
LittleFlame
LittleFlame 10.08.2011, aktualisiert am 18.10.2012 um 18:47:48 Uhr
Goto Top
So, vielen Dank an alle. Ich hab meine Fehler gefunden und die Optimierungsvorschläge überdacht und eingearbeitet.

Jetzt möcht ich aber kurz noch eine Frage stellen:
Im Workshop Batch for Runaways - Part II gibt es am Anfang einen Codeschnipsel, an dem ich mich orientiert hab.
(Der ist zwar nicht wirklich ernst gemeint, aber soll einen Batch-Code darstellen)
Die angesprochenen Dinge sind in diesem Script also auch falsch oder?


Grüße und vielen Dank,
LF
bastla
bastla 10.08.2011 um 12:07:00 Uhr
Goto Top
Hallo LittleFlame!
Die angesprochenen Dinge sind in diesem Script also auch falsch oder?
Zumindest sollte keine Zeile (und schon gar nicht die Zeilen 4-6) eine ungerade Anzahl von " enthalten (was aber interessanter Weise fast 6 Jahre lang niemanden gestört hat bzw eher niemandem aufgefallen ist - ich habe offensichtlich auch gleich bei ":NewbieStuff" zu lesen begonnen) ... face-wink

Grüße
bastla
Skyemugen
Skyemugen 10.08.2011 um 12:13:41 Uhr
Goto Top
Aloha,

sogar noch fataler *gg* dort steht es anfangs mit nur einem Zollzeichen also Biber, Biber

muss gestehen, habe mir hier bisher noch keine Tutorials angeguckt, wer merkt sich schon den Hauf' an Informationen ... learning by doing und zur Not asking finde ich viel effektiver

greetz André

edit: too late unser Elektrotechniker kam mit einem Anruf beim Posten dazwischen ;D
Biber
Biber 10.08.2011, aktualisiert am 18.10.2012 um 18:47:49 Uhr
Goto Top
Moin LittleFlame,

Zitat von @LittleFlame:
So, vielen Dank an alle. Ich hab meine Fehler gefunden und die Optimierungsvorschläge überdacht und eingearbeitet.

Jetzt möcht ich aber kurz noch eine Frage stellen:
Im Workshop Batch for Runaways - Part II gibt es am Anfang einen
Codeschnipsel, an dem ich mich orientiert hab.
(Der ist zwar nicht wirklich ernst gemeint, aber soll einen Batch-Code darstellen)
Die angesprochenen Dinge sind in diesem Script also auch falsch oder?
Ja nee, das is' mir ja so was von peinlich.....

Das war wirklich ein durch Copy&Paste verdreifachter Tippfeh Pfusch.
Ich gelobe mich zu bessern.

Jedenfalls habe ich im Tutorial-Intro noch ein paar von diesen Dingern, für die hier im Forum das Fachwort "Zollzeichen" geprägt wurde, spendiert.

Grüße und ich freue mich immer, wenn jemand sich tatsächlich mal durch eines dieser Workshop-Tuts quält.

Biber
Skyemugen
Skyemugen 10.08.2011 um 19:13:12 Uhr
Goto Top
Aloha Biber,

ähm ...

If /i "%Leser"%=="M" set Leser=Advanced

verschlimmbessern gilt aber nicht face-wink

greetz André

P.S.: Zeile 05 face-wink
Biber
Biber 10.08.2011 um 23:45:37 Uhr
Goto Top
[OT]
Moin Skyemugen,

Zitat von @Skyemugen:
Aloha Biber,

ähm ...

> If /i "%Leser"%=="M" set Leser=Advanced

verschlimmbessern gilt aber nicht face-wink
Okay, okay, ich habe es aber wenigstens versucht...

Ich hoffe nur, dass wenn mir dereinst aus dem Buch des Lebens vorgelesen wird, wenigstens dann alle Zitate in einer geraden Anzahl von Anführungszeichen stehen.
Wahrscheinlich sind auch die Kerben auf dem Schwert von Erzengel Gabriel in Wirklichkeit "Zollzeichen". *gg

Jedenfalls ist dieses Forum manchmal ein gutes Training für das Jüngste Gericht, scheint mir.

Danke für den Hinweis - ich habe es nochmals nachverschlimmgebessert...ähhm verschlimmnachgebessert.... also nochmal geändert..

Grüße
Biber
[/OT]