For-Schleife Fortlaufende Variablen
Ich habe schon in anderen Threads nachgesehen, Dr. Google bemüht, aber entweder hab ich nicht die richtigen Suchworte gefunden oder es sind nicht die passenden Probleme aufgetreten.
So nun aber zu meinem Problem:
Ist es möglich diese ganze Konstruktion ohne Parameter, -vielleicht mit einer zweiten for-Schleife-, zu schreiben?
Danke für alle Tipps die ich bekomme
MfG Karsten
So nun aber zu meinem Problem:
rem Es wird als erstes eine Variable durch die Benutzereingabe gesetzt.
set /p Zahlen=Ziffern eingeben (durch Komma getrennt. Es werden nur die ersten 4 zeichen beruecksichtigt) (Bsp.:44,88,468,421):
rem Nun wird diese Variable in einer For /f Konstruktion weiterverwertet und wieder getrennt.
for /f "tokens=1-4 delims=," %%a in ("%Zahlen%") do call :test %%a %%b %%c %%d
rem Jetzt werden die einzelnen Parameter in Variablen gesetzt und angezeigt
:test
set var1=%:~1
set var1=%:~2
set var1=%:~3
set var1=%:~4
echo %var1% %var2% %var3% %var4%
pause
Danke für alle Tipps die ich bekomme
MfG Karsten
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 146246
Url: https://administrator.de/contentid/146246
Ausgedruckt am: 22.11.2024 um 13:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo Karsten!
Soferne nicht (viel) mehr als das Anzeigen passieren soll, würde ja natürlich die direkte Verwendung der Schleifenvariablen, etwa in der Art:
als Zeile 4 genügen ...
... aber was mit "ohne Parameter" gemeint ist, kann ich mir jetzt nicht so richtig vorstellen ...
Was ist denn letztlich der Endzweck der ganzen Aktion?
Grüße
bastla
Soferne nicht (viel) mehr als das Anzeigen passieren soll, würde ja natürlich die direkte Verwendung der Schleifenvariablen, etwa in der Art:
for /f "tokens=1-4 delims=," %%a in ("%Zahlen%") do echo %%a %%b %%c %%d
... aber was mit "ohne Parameter" gemeint ist, kann ich mir jetzt nicht so richtig vorstellen ...
Was ist denn letztlich der Endzweck der ganzen Aktion?
Grüße
bastla
Hallo Karsten!
Natürlich kannst Du die "
Solange alles innerhalb des "
Grüße
bastla
Natürlich kannst Du die "
for
"-Schleife auch so schreiben:for /f "tokens=1-4 delims=," %%a in ("%Zahlen%") do (
echo %%a %%b %%c %%d
if %%a leq 254 if %%b leq 254 if %%c leq 254 if %%d leq 254 ping %%a.%%b.%%c.%%d
)
do
" (auch wenn es, wie in diesem Beispiel, über mehrere Zeilen verteilt ist) abgehandelt wird, brauchst Du eigentlich keine Zuweisung an andere Variablen vorzunehmen ...Grüße
bastla
Hallo kkboy,
in obigem Fall arbeitest Du am Besten ohne For-Schleife, sondern übergibst die Eingabe direkt an die Subroutine (die ist bei deinem Batch übrigends NICHT vom Hauptteil mit einem notwendigen Goto :Eof getrennt)
Der Call trennt die Argumente per Default an Leerzeichen Komma Semikolon und Tab.
Wenn du jetzt noch shift benutzt, kannst du eine beliebige Anzahl von Argumenten (nur durch die max Zeilenlänge begrenzt) verarbeiten.
Der Set /A mit "&"=binärem AND behält von der Zahl nur die untersten 8 Bit (0-255)
Wenn die Zahl davon abweicht, war es eine Fehleingabe.
Gruß
LotPings
in obigem Fall arbeitest Du am Besten ohne For-Schleife, sondern übergibst die Eingabe direkt an die Subroutine (die ist bei deinem Batch übrigends NICHT vom Hauptteil mit einem notwendigen Goto :Eof getrennt)
Der Call trennt die Argumente per Default an Leerzeichen Komma Semikolon und Tab.
Wenn du jetzt noch shift benutzt, kannst du eine beliebige Anzahl von Argumenten (nur durch die max Zeilenlänge begrenzt) verarbeiten.
Der Set /A mit "&"=binärem AND behält von der Zahl nur die untersten 8 Bit (0-255)
Wenn die Zahl davon abweicht, war es eine Fehleingabe.
@Echo off&SetLocal
set /p Zahlen=Ziffern eingeben (durch Komma getrennt. Es werden nur die ersten 4 zeichen beruecksichtigt) (Bsp.:44,88,468,421):
Call :test %Zahlen%
Goto :Eof
:test
If "%~1" EQU "" goto :Eof
set /A "var=%~1 & 255"
If "%var%" EQU "%~1" (
Echo Ping -n 1 x.y.z.%1
) Else (
Echo ungültiges Octet %1
)
Shift
Goto :test
Gruß
LotPings
Hallo Karsten,
ich will mich ja nicht mit fremden Federn schmücken, aber meine eigenen möchte ich schon noch behalten dürfen
In Zeile 17 ist hinten eine öffnende Klammer zu viel, verschiebe statt dessen den Inhalt von Z18 dahin.
Gruß
LotPings
ich will mich ja nicht mit fremden Federn schmücken, aber meine eigenen möchte ich schon noch behalten dürfen
In Zeile 17 ist hinten eine öffnende Klammer zu viel, verschiebe statt dessen den Inhalt von Z18 dahin.
Gruß
LotPings