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

Text-Datei IP rausparsen

Frage Entwicklung Batch & Shell

Mitglied: Planip

Planip (Level 1) - Jetzt verbinden

03.05.2012, aktualisiert 18.10.2012, 1953 Aufrufe, 15 Kommentare

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!
Mitglied: bastla
03.05.2012 um 09:42 Uhr
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
Bitte warten ..
Mitglied: Planip
03.05.2012 um 10:07 Uhr
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?

Mit freundlichen Grüßen Planip!
Bitte warten ..
Mitglied: 60730
03.05.2012, aktualisiert 18.10.2012
moin,

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

Genau
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
Bitte warten ..
Mitglied: 106009
03.05.2012 um 11:55 Uhr
Hi, auch von mir ein Willkommen.

Versuche es doch mal so:
01.
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.
Bitte warten ..
Mitglied: bastla
03.05.2012 um 21:37 Uhr
@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
Bitte warten ..
Mitglied: 106009
03.05.2012 um 21:41 Uhr
@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
Bitte warten ..
Mitglied: bastla
03.05.2012 um 21:46 Uhr
@106009
und der hat geklappt
Aber nur ohne "setlocal" und beim zweiten Anlauf (wenn es also %ip% schon gibt) ...

Grüße
bastla
Bitte warten ..
Mitglied: Planip
03.05.2012 um 21:50 Uhr
Danke euch, jetzt noch zusätzlich was gelernt geniales Forum vorallem die Antwortzeiten!!
Bitte warten ..
Mitglied: 106009
03.05.2012 um 22:11 Uhr
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?
Bitte warten ..
Mitglied: bastla
03.05.2012 um 22:22 Uhr
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
Bitte warten ..
Mitglied: 106009
03.05.2012 um 22:50 Uhr
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
Bitte warten ..
Mitglied: bastla
03.05.2012 um 22:59 Uhr
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
Bitte warten ..
Mitglied: 60730
03.05.2012, aktualisiert 18.10.2012
[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?
Bitte warten ..
Mitglied: bastla
04.05.2012 um 08:15 Uhr
@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
Bitte warten ..
Mitglied: 60730
04.05.2012 um 14:31 Uhr
Salü bastla
[1/2 OT]
hat aber lang gedauert

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ß
Bitte warten ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (34)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...