planip
Goto Top

Text-Datei IP rausparsen

Hallo,

Ich habe folgende .txt:

IPv4-Adresse . . . . . . . . . . : 192.XXX.XXX.XXX
IPv4-Adresse . . . . . . . . . . : 172.XXX.XXX.XXX

...Und würde gerne die zweite IP rausparsen. Ohne das [ IPv4-Adresse . . . . . . . . . . : ] einzig und alleine nur die zweite IP!

Momentan bekomme ich nur leere Variable raus!

Script:

for /f "tokens=2 delims=." %%a in (D:\allips.txt) do set ip1=%%a
echo %ip1%

pause

Danke für eure Hilfe!

Content-Key: 184395

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

Printed on: April 26, 2024 at 02:04 o'clock

Member: bastla
bastla May 03, 2012 at 07:42:42 (UTC)
Goto Top
Hallo Planip und willkommen im Forum!

Da sich zwischen den einzelnen Punkten auch Leerzeichen befinden, kann "tokens=2" nicht funktionieren - versuch es eher so:
for /f "tokens=13" %%a in (D:\allips.txt) do set "ip1=%%a"
Dabei wird allerdings genau genommen nicht die zweite, sondern die letzte IP als %ip1% gespeichert ...

Grüße
bastla
Member: Planip
Planip May 03, 2012 at 08:07:52 (UTC)
Goto Top
Super Danke! Danke fürs Willkommen heißen!

Habs im Enddeffekt komplett in eine Variable geschrieben und aus dieser Ausgelesen.
Frage hierzu auf dem Desktop wird nun eine Datei names %allips (Name der Variable) gespeichert.
Warum gerade dort? Wegen des Default Path Variable?

MFG Planip!
Mitglied: 60730
60730 May 03, 2012, updated at Oct 18, 2012 at 16:50:47 (UTC)
Goto Top
moin,

weißt du, was aus der Ferne immer etwas schwierig ist?

Genau face-wink
Frage hierzu auf dem Desktop wird nun eine Datei names %allips (Name der Variable) gespeichert.
Warum gerade dort? Wegen des Default Path Variable?
TMo würde dir jetzt sagen, weil in Zeile 16 ein Befehl steht, der dafür zuständig ist - nimm den raus.

Gruß

PS: batch ip text
Mitglied: 106009
106009 May 03, 2012 at 09:55:21 (UTC)
Goto Top
Hi, auch von mir ein Willkommen.

Versuche es doch mal so:
for /f "tokens=2 delims=:" %%a in ('findstr /C:"IPv4-Adresse" /C:"172." D:\allips.txt') do set "ip=%%a" & set ip1=%ip:~1%  

Die zweite Variable ip1 dient nur dazu, das Leerzeichen, das in ip an erster Position enthalten ist zu eliminieren. Wenn du mit dem Leerzeichen leben kannst, kannst du auf den 2. set-Befehl auch verzichten.

Gruß

Edit: Anführungszeichen hinzugefügt.
Member: bastla
bastla May 03, 2012 at 19:37:08 (UTC)
Goto Top
@106009
Die Suchbegriffe lassen sich (da sie ja keine Leerzeichen enthalten) zusammenfassen (obwohl ja eher eine "Und"-Verknüpfung gemeint sein dürfte, was aber durch zwei aufeinanderfolgende "findstr" zu realisieren wäre):
for /f "tokens=2 delims=:" %%a in ('findstr "IPv4-Adresse 172\." D:\allips.txt') do set "ip=%%a"
und ohne "delayedExpansion" wird (abgesehen davon, dass Du mit der dargestellten Schreibweise sogar noch ein zusätzliches Leerzeichen am Ende von %ip% erzeugst) das mit dem Leerzeichen-Entfernen nicht klappen ...

Grüße
bastla
Mitglied: 106009
106009 May 03, 2012 at 19:41:51 (UTC)
Goto Top
@bastla
Zitat von @bastla:
und ohne "delayedExpansion" wird (abgesehen davon, dass Du mit der dargestellten Schreibweise sogar noch ein
zusätzliches Leerzeichen am Ende von %ip% erzeugst) das mit dem Leerzeichen-Entfernen nicht klappen ...

Ich prüfe meinen Code (fast) immer, bevor ich ihn poste. Und den habe ich geprüft und der hat geklappt (XP und Win7)., :-P

Gruß
ollidolli
Member: bastla
bastla May 03, 2012 at 19:46:19 (UTC)
Goto Top
@106009
und der hat geklappt
Aber nur ohne "setlocal" und beim zweiten Anlauf (wenn es also %ip% schon gibt) ...

Grüße
bastla
Member: Planip
Planip May 03, 2012 at 19:50:10 (UTC)
Goto Top
Danke euch, jetzt noch zusätzlich was gelernt geniales Forum vorallem die Antwortzeiten!!
Mitglied: 106009
106009 May 03, 2012 at 20:11:28 (UTC)
Goto Top
Zitat von @bastla:
Aber nur ohne "setlocal" und beim zweiten Anlauf (wenn es also %ip% schon gibt) ...
Auch wenn du Recht hast: Und nur mit Rückenwind und Schweißfüßen.
Unter bestimmten Bedingungen wird es also doch funktionieren, nicht wahr?
Setlocal ist für den Pipifax überflüssig und getestet habe ich das in der Konsole, erst als kommandozeile und dann als Batch.

Warum bist du nicht auf die Idee gekommen?
Member: bastla
bastla May 03, 2012 at 20:22:42 (UTC)
Goto Top
Hallo ollidolli!
Warum bist du nicht auf die Idee gekommen?
Auf welche Idee?
Unter bestimmten Bedingungen wird es also doch funktionieren, nicht wahr?
Nochmals zur Klarstellung:
  • Beim ersten Durchlauf wird in die Variable %ip% " 172..XXX.XXX.XXX " und in %ip1% "~1" geschrieben, da der Inhalt von %ip% noch nicht zur Verfügung steht.
  • Beim zweiten Durchlauf wird neuerlich in die Variable %ip% " 172..XXX.XXX.XXX " geschrieben - da es aber kein "setlocal" gibt, steht zunächst noch der Wert aus dem ersten Durchlauf in %ip% und kann jetzt für die Zuweisung zu %ip1% verwendet werden.
Da ich davon ausgehe, dass ein Batch beim ersten Durchlauf das gewünschte Ergebnis bringen sollte, würde ich dieses Verhalten nicht "funktionieren" nennen.

Funktionieren würde es, wenn die Zuweisung zu %ip1% in einer zweiten Zeile (außerhalb der Schleife) vorgenommen wird (da dann eben %ip% schon aufgelöst werden kann).
Setlocal ist für den Pipifax überflüssig
"setlocal" sorgt dafür, dass Änderungen an Variablenwerten nur innerhalb des ablaufenden Batches gelten - was in den allermeisten Fällen (auch hier) sinnvoll und wünschenswert ist.

Grüße
bastla
Mitglied: 106009
106009 May 03, 2012 at 20:50:48 (UTC)
Goto Top
Auf welche Idee?
tokens=2 delims=:

Nochmals zur Klarstellung:
Da ich davon ausgehe, dass ein Batch beim ersten Durchlauf das gewünschte Ergebnis bringen sollte, würde ich dieses Verhalten nicht "funktionieren" nennen.
Da ich davon ausgehe, dass ein "nicht funktionieren" keine Ausnahme zulässt, würde ich davon ausgehen, dass deine Bauptung, es funktioniert nicht, so ganz einfach falsch ist.
Es funktioniert nämlich unter bestimmten Voraussetzungen doch.
Wenn du nicht nur darauf aus bist, Ideen, die nicht von dir stammen, zu kritisieren, dann schreib gleich das, was nach deiner Meinung zum Fehlverhalten führen könnte und nicht "es wird nicht funktionieren" und nic ht erst nach einem Einwand..

Außerdem war mein Vorschlag nicht an dich, sondern an den TE gerichtet.

Du musst nicht in fast jedem Batch-Thread das letzte Wort haben.

EOD
Member: bastla
bastla May 03, 2012 at 20:59:01 (UTC)
Goto Top
Hallo ollidolli!
tokens=2 delims=:
Auf die Idee war ich durchaus gekommen, habe sie aber zugunsten von "tokens=13" verworfen, da ich so das (von Dir richtig erkannte) führende Leerzeichen vermeide ...
Es funktioniert nämlich unter bestimmten Voraussetzungen doch.
Wenn Du damit zufireden bist ...
dann schreib gleich das, was nach deiner Meinung zum Fehlverhalten führen könnte und nicht "es wird nicht funktionieren"..
Eigentlich hätte ich angenommen, dass Du
und ohne "delayedExpansion" ...
inzwischen schon richtig interpretieren kannst.

Grüße
bastla
Mitglied: 60730
60730 May 03, 2012, updated at Oct 18, 2012 at 16:50:48 (UTC)
Goto Top
[OT]
@ Ollerdoller:

Der Bastla ist einer von den ganz harten, wenn was nicht aus seinem Hirn kommt, dann nimmt der das auseinander.
Und wenn das funktionackelt, dann hat der auch mal ein Lob übrig.
Das solltest du dann schon wissen, bevor du mit "Ideen" anfängst, die wir hier vor Jahren schon zerpflückt haben.

Such mal nach ip auslesen Batch Variable..vielleicht findest du dann sowas
Statt der 3 muss dort die 14 stehen. Bei "delims" habe ich das Leezeichen noch hinzugefügt, da sonst bei der IP-Adresse noch ein Leerzeichen davor war.
[/OT]

E:\>type E:\script\text.txt

Ich habe folgende .txt:

IPv4-Adresse . . . . . . . . . . : 192.123.172.123
IPv4-Adresse . . . . . . . . . . : 172.987.654.321
E:\>
E:\>for /f "delims=" %a in ('findstr "172.[0-9][0-9][0-9].[0-9][0-9][0-9].[0-9][0-9][0-9]" E:\script\text.txt') do set ip=%a

E:\>set ip=IPv4-Adresse . . . . . . . . . . : 172.987.654.321

E:\>set ip=%ip:~-15%

E:\>echo %ip%
172.987.654.321

E:\>
Noch Fragen Kienzle?
Member: bastla
bastla May 04, 2012 at 06:15:49 (UTC)
Goto Top
@t-mo
Dein Suchbegriff ist etwas restriktiv (aber Voraussetzung dafür, dass "%ip:~-15%" passt - obwohl dann auch noch ein "/e" angebracht wäre) - flexibler (aber natürlich weniger sicher, da RegEx mit "findstr" eben nur "*" zu bieten hat):
findstr "172\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*"
Die Zerlegung müsste dann natürlich wieder die variable Stellenanzahl berücksichtigen (was für "for" spräche) ...

Grüße
bastla
Mitglied: 60730
60730 May 04, 2012 at 12:31:49 (UTC)
Goto Top
Salü bastla
[1/2 OT]
hat aber lang gedauert face-wink

Ich vermutete einer wird schon merken, dass da zwei Sachen stehen und die Antwort würde mit ja Hauser anfangen.
Das das (nicht nur das umgehen der wilden 13 wegen Jim Knopf) alles Humbug ist - darauf wollte ich hinaus.

C:\>echo 10.99.172.1|findstr /c:"172." && echo ätsch
10.99.172.1
ätsch

Ps: Der Onkel meiner Nichte, der auch gleichzeitig der Schwiegersohn meiner Schwiegermutter ist, der würde so nen Schmodder ja eh ganz anders machen - vielleicht wegen dem 13. Schlüssel, aber wahrscheinlich eher, weil der nen funktionierenden DNS hat.
Ich frag den mal, wenn ich Ihn sehe.
[/1/2 OT]

Gruß