jschneider
Goto Top

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

@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 face-wink


Gruß, Jan

Content-ID: 73449

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

Ausgedruckt am: 22.11.2024 um 12:11 Uhr

bastla
bastla 13.11.2007 um 15:01:42 Uhr
Goto Top
Hallo jschneider!

Bei dem Titel frage ich mich, ob Du das Biber-Zitat "Mit Batch geht alles außer Brotschneiden" kennst ... face-wink

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%
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
set "IP=%IP: =%"  
weggefiltert.

Grüße
bastla
jschneider
jschneider 13.11.2007 um 15:20:51 Uhr
Goto Top
Hallo jschneider!

Bei dem Titel frage ich mich, ob Du das
Biber-Zitat "Mit Batch geht
alles außer
Brotschneiden
" kennst ... face-wink

na logisch oder wie meinst du komme ich auf "brotschneiden" sonst in diesem Forum face-wink


dein Tip war erste Sahne.. ich habs nun erweitert um die anderen zeilen die ich da so noch brauche und bedanke mich erneut


Gruß, Jan