Brotschneiden einer Textdatei
zeilenweise innerhalb einer Textdatei springen, wenn mit for /f etwas gefunden wurde
Hallo,
ich habe eine Exportdatei die ich irgendwie mit dem Brotmesser (musste jetzt irgendwie den Link zum Topic hinbekommen) auslesen muss
ich durchforste die Datei per
wenn findstr eine entsprechende Zeile gefunden hat soll die schleife bitte in die nächste Zeile springen und die existenz eines weiteren Wertes überprüfen.
Die Quelldatei hat 2 Stellen die interresant werden nur die Zeilen die mit "Number" gefunden werden und in der nächsten Zeile ein "Assignment Type = 8" sollen weiter verarbeitet werden
Sobald also im oberen Code "Number" gefunden wurde wird die entsprechende IP in eine Variable gepackt und dann soll in der nächsten Zeile geschaut werden ob der Wert dort "Assignment Type = 8"
Und Wenn er das ist wieder eine Zeile weiter springen.. Hostname in eine Variable packen und weider 2 weiter springen um die MAC in eine Variable zu schieben
so, wo ist jetzt mein Brotmesser
Gruß, Jan
Hallo,
ich habe eine Exportdatei die ich irgendwie mit dem Brotmesser (musste jetzt irgendwie den Link zum Topic hinbekommen) auslesen muss
ich durchforste die Datei per
@echo off
set Source=c:\quelle.txt
set dest=c:\mach.txt
for /f "tokens=5 delims= " %%i in ('findstr "Number" %Source%') do (
set ResIP=%%a
@for /f %ResIP% in ('echo %%i') do (
rem set ResIP=%%a
echo %ResIP%
)
)
wenn findstr eine entsprechende Zeile gefunden hat soll die schleife bitte in die nächste Zeile springen und die existenz eines weiteren Wertes überprüfen.
Die Quelldatei hat 2 Stellen die interresant werden nur die Zeilen die mit "Number" gefunden werden und in der nächsten Zeile ein "Assignment Type = 8" sollen weiter verarbeitet werden
[IP Address Configuration : "10_224_6_64.irgendwas"]
IP Address Number = 10.224.6.64
Assignment Type = 8
Host Name = Computer1001
Last Used = 1192424353000
MAC Address = 1 00 11 85 81 27 13
Client Identifier = 01 00 11 85 81 27 13
[IP Address Configuration : "10_224_6_65.irgendwas"]
IP Address Number = 10.224.6.65
Assignment Type = 2
Host Name = Notebook4
MAC Address = ff 00 10 4B 3F 31 B9
[IP Address Configuration : "10_224_6_66.irgendwas"]
IP Address Number = 10.224.6.66
Assignment Type = 8
Host Name = Computer1005
Last Used = 1163079451000
MAC Address = 1 00 02 A5 16 3B E0
Client Identifier = 01 00 02 A5 16 3B E0
Sobald also im oberen Code "Number" gefunden wurde wird die entsprechende IP in eine Variable gepackt und dann soll in der nächsten Zeile geschaut werden ob der Wert dort "Assignment Type = 8"
Und Wenn er das ist wieder eine Zeile weiter springen.. Hostname in eine Variable packen und weider 2 weiter springen um die MAC in eine Variable zu schieben
so, wo ist jetzt mein Brotmesser
Gruß, Jan
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73449
Url: https://administrator.de/contentid/73449
Ausgedruckt am: 22.11.2024 um 12:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo jschneider!
Bei dem Titel frage ich mich, ob Du das Biber-Zitat "Mit Batch geht alles außer Brotschneiden" kennst ...
Aber zum Glück meint er ja nicht immer alles todernst, daher vielleicht doch ein Versuch:
Beim Aufruf des Unterprogramms werden Zeilennummer und IP-Adresse als Parameter %1 und %2 übergeben.
Gefunden werden kann das Wertepaar IP-MAC nur, wenn (ausgehend von der Zeilennummer in %1) die Zeilenabstände (+1 / +3 weitere) eingehalten werden, da zur Sicherheit die jeweiligen Zeilen für "Assignment" und "MAC Address" nochmals mit "findstr" überprüft werden.
(Führende) Leerzeichen bei IP- und MAC-Adresse sind vermutlich unerwünscht und werden daher mit zB
weggefiltert.
Grüße
bastla
Bei dem Titel frage ich mich, ob Du das Biber-Zitat "Mit Batch geht alles außer Brotschneiden" kennst ...
Aber zum Glück meint er ja nicht immer alles todernst, daher vielleicht doch ein Versuch:
@echo off & setlocal
set Source=c:\quelle.txt
set dest=c:\mach.txt
for /f "tokens=1-2* delims=:=" %%i in ('findstr /n "Number" "%Source%"') do call :ProcessLine %%i "%%k"
goto :eof
:ProcessLine
set /a ZNr=%1+1
findstr /n . "%Source%"|findstr /b "%ZNr%:"|findstr /c:"Assignment Type = 8">nul || goto :eof
set /a ZNr+=3
set MAC=
for /f "tokens=1-2* delims=:=" %%i in ('findstr /n . "%Source%"^|findstr /b "%ZNr%:"^|findstr /c:"MAC Address ="') do set "MAC=%%k"
if not defined MAC goto :eof
set "MAC=%MAC: =%"
set IP=%~2
set "IP=%IP: =%"
echo IP:%IP% MAC:%MAC%
Gefunden werden kann das Wertepaar IP-MAC nur, wenn (ausgehend von der Zeilennummer in %1) die Zeilenabstände (+1 / +3 weitere) eingehalten werden, da zur Sicherheit die jeweiligen Zeilen für "Assignment" und "MAC Address" nochmals mit "findstr" überprüft werden.
(Führende) Leerzeichen bei IP- und MAC-Adresse sind vermutlich unerwünscht und werden daher mit zB
set "IP=%IP: =%"
Grüße
bastla