Textdateidurchsuchungs-Programm
Hallo,
ich habe schon mehrere Dateidurchsuchungsprogramme wie :
Textfinder, Wingrep, Examine 32, EF Find
probiert, aber nicht funktionier so wie ich es brauchen würde.
Zu meinem Problem:
Ich suche ein Programm das eine Textdatei durchsucht und mir sagen kann in welchem Abschnitt (Abschnitt endet mit !) das Wort "dot1x" nicht vorkommt.
Mit dem Programmen oben konnte ich nur angeben das er z.b: immer 10 Zeilen nimmt oder 100 Buchstaben aber das dies immer eine andere Länge hat funktioniert das nicht.
Beispieltextdatei:
interface FastEthernet0/1
description xxxxxxxx
switchport xxxxxxxx
switchport xxxxxxxx
no logging xxxxxxxx
load-interval xxxx
no snmp trap link-status
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
spanning-tree portfast
!
interface FastEthernet0/2
description xxxxx
switchport xxxxx
switchport xxxxx
no logging xxxxx
load-interval xxxxx
no snmp trap link-status
spanning-tree portfast
!
interface FastEthernet0/3
description xxxxx
switchport xxxxx
switchport xxxxx
no logging xxxxx
load-interval xxxxx
no snmp trap link-status
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
spanning-tree portfast
!
Gruß Erath
ich habe schon mehrere Dateidurchsuchungsprogramme wie :
Textfinder, Wingrep, Examine 32, EF Find
probiert, aber nicht funktionier so wie ich es brauchen würde.
Zu meinem Problem:
Ich suche ein Programm das eine Textdatei durchsucht und mir sagen kann in welchem Abschnitt (Abschnitt endet mit !) das Wort "dot1x" nicht vorkommt.
Mit dem Programmen oben konnte ich nur angeben das er z.b: immer 10 Zeilen nimmt oder 100 Buchstaben aber das dies immer eine andere Länge hat funktioniert das nicht.
Beispieltextdatei:
interface FastEthernet0/1
description xxxxxxxx
switchport xxxxxxxx
switchport xxxxxxxx
no logging xxxxxxxx
load-interval xxxx
no snmp trap link-status
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
spanning-tree portfast
!
interface FastEthernet0/2
description xxxxx
switchport xxxxx
switchport xxxxx
no logging xxxxx
load-interval xxxxx
no snmp trap link-status
spanning-tree portfast
!
interface FastEthernet0/3
description xxxxx
switchport xxxxx
switchport xxxxx
no logging xxxxx
load-interval xxxxx
no snmp trap link-status
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
dot1x xxxxx
spanning-tree portfast
!
Gruß Erath
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 136759
Url: https://administrator.de/forum/textdateidurchsuchungs-programm-136759.html
Ausgedruckt am: 24.04.2025 um 20:04 Uhr
31 Kommentare
Neuester Kommentar
Moin Erathy,
Rückfragen:
Grüße
Biber
Rückfragen:
- muss es denn ein Tool sein oder geht auch ein handelsüblicher Batch/VBS-Skriptschnipsel?
- wie/in welcher Form brauchst du denn dein Ergebnis? Als Textdatei/Auswertung/Liste? Oder in einem Programmablauf als Prüfung "Prüfe Abschnitt XY, ob dot1.1.xxx" vorhanden (ja/nein)?"
- oder ist gar "ein Programm das eine Textdatei durchsucht und mir sagen kann" wörtlich gemeint und du erwartest eine Sprachausgabe? Wenn ja: nur deutsch oder simultan übersetzt?
Grüße
Biber
Hallo Erathy und willkommen im Forum!
Dazu würde ich einen Batch mit etwas VBS verwenden:
Wie groß kann denn die besagte Textdatei werden? Ich habe mal unterstellt, dass sie zur Gänze in den Arbeitsspeicher passt ...
[Edit]
Falls Du übrigens nur an der jeweils ersten Zeile des Blocks (also zB "interface FastEthernet0/2" interessiert sein solltest, müssten die Zeilen 6 und 7 so aussehen:
[Edit]
Grüße
bastla
[Edit] @Biber: Im Vergleich zu mir hast Du Dir den Beinamen "der Geduldige" tatsächlich verdient ...
[/Edit]
Dazu würde ich einen Batch mit etwas VBS verwenden:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
@echo off & setlocal
set "Datei=D:\Beispiel.txt"
set "Suche=dot1x"
set "Ergebnis=D:\Ergebnis.txt"
set "G=%temp%\GetP.vbs"
>%G% echo T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll, "!")
>>%G% echo S=WScript.Arguments(1):For i = 0 To UBound(T):If InStr(T(i),S)=0 Then:WScript.Echo T(i):End If:Next
cscript //nologo "%G%" "%Datei%" "%Suche%">"%Ergebnis%"
[Edit]
Falls Du übrigens nur an der jeweils ersten Zeile des Blocks (also zB "interface FastEthernet0/2" interessiert sein solltest, müssten die Zeilen 6 und 7 so aussehen:
1
2
2
>%G% echo T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll, "!" ^& vbCrLf)
>>%G% echo S=WScript.Arguments(1):For i=0 To UBound(T):If InStr(T(i),S)=0 Then:If T(i)^<^>"" Then:WScript.Echo Split(T(i),vbCrLF)(0):End If:End If:Next
Grüße
bastla
[Edit] @Biber: Im Vergleich zu mir hast Du Dir den Beinamen "der Geduldige" tatsächlich verdient ...
Hallo Erathy!
- insofern:
Willst Du jedes Mal den Suchbegriff eingeben, oder genügt es, wenn dieser im Batch festgelegt ist?
Möchtest Du die Datei eingeben, oder wäre Dir "Drag & Drop" lieber?
Für das "Zeigen" der Blöcke bietet sich der Editor an (dazu einfach im Batch oben am Ende die Zeile
hinzufügen) ...
Grüße
bastla
ich kann sagen " suche in Datei "xxx" und zeig mir alle Blöcke wo nicht "dot 1x" vorhanden ist.
Ich fürchte, Spracheingabe kann ich nicht anbieten Willst Du jedes Mal den Suchbegriff eingeben, oder genügt es, wenn dieser im Batch festgelegt ist?
Möchtest Du die Datei eingeben, oder wäre Dir "Drag & Drop" lieber?
Für das "Zeigen" der Blöcke bietet sich der Editor an (dazu einfach im Batch oben am Ende die Zeile
notepad "%Ergebnis%"
Grüße
bastla
Hallo Erathy!
Wenn Du auswählen willst, dann bietet sich "Drag & Drop" an - dazu einfach anstelle von
die Zeile
verwenden.
Grüße
bastla
Wenn Du auswählen willst, dann bietet sich "Drag & Drop" an - dazu einfach anstelle von
set /p Auswahl="Bitte Textdatei Waehlen: "
set "Auswahl=%~1"
Was mir noch aufgefallen ist, wenn ich Namen habe die Leerzeichen enthalten nimmt er mir nur den letzten Teil des Namens.
Deshalb stand ja bei mir oben "%Datei%" (bei Dir dann eben "%Auswahl%") auch unter Anführungszeichen ...Grüße
bastla
Hallo Erathy!
Versuch es damit:
Wenn Du eine Datei auf den Batch ziehst, wird ohnehin der vollständige Pfad übergeben.
Falls Du alle Textdateien, deren Name mit "test" beginnt, verarbeiten wolltest, dann (ungetestet) etwa so:
Grüße
bastla
Versuch es damit:
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
@echo off & setlocal
set "Datei=%~1"
set "Suche=dot1x"
set "Ergebnis=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\Ergebnis.txt"
set "G=%temp%\GetP.vbs"
>%G% echo T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll, "!")
>>%G% echo S=WScript.Arguments(1):For i = 0 To UBound(T):If InStr(T(i),S)=0 Then:WScript.Echo T(i):End If:Next
cscript //nologo "%G%" "%Datei%" "%Suche%">"%Ergebnis%"
Falls Du alle Textdateien, deren Name mit "test" beginnt, verarbeiten wolltest, dann (ungetestet) etwa so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@echo off & setlocal
set "Dateien=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\test*.txt"
set "Suche=dot1x"
set "Ergebnis=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\Ergebnis.txt"
set "G=%temp%\GetP.vbs"
>%G% echo T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(WScript.Arguments(0)).ReadAll, "!")
>>%G% echo S=WScript.Arguments(1):For i = 0 To UBound(T):If InStr(T(i),S)=0 Then:WScript.Echo T(i):End If:Next
del "%Ergebnis%" 2>nul
for %%i in ("%Dateien%") do (
echo %%i
echo\
cscript //nologo "%G%" "%%i" "%Suche%"
echo =================================
)>>"%Ergebnis%"
bastla
Hallo Erathy!
Na dann:
[Edit] Aufrufparameter in Zeile 15 richtig gestellt [/Edit]
Grüße
bastla
Na dann:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off & setlocal
set "Dateien=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\test*.txt"
set "Mit=Name1"
set "Ohne=Name2"
set "Ergebnis=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\Ergebnis.txt"
set "G=%temp%\GetP.vbs"
>%G% echo Set a=WScript.Arguments:T=Split(CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll, "!")
>>%G% echo M=a(1):O=a(2):For i=0 To UBound(T):If InStr(T(i),M)^>0 And InStr(T(i),O)=0 Then:WScript.Echo T(i)^&"!":End If:Next
del "%Ergebnis%" 2>nul
for %%i in ("%Dateien%") do (
echo %%i
echo\
cscript //nologo "%G%" "%%i" "%Mit%" "%Ohne%"
echo =================================
)>>"%Ergebnis%"
Grüße
bastla
Hallo Erathy!
Das Ignorieren der Groß-/Kleinschreibung sollte diese geänderte Zeile 9 ermöglichen:
Zu 2.
Kann davon ausgegangen werden, dass der erste relevante Block mit dem Wort "interface" (am Zeilenanfang) beginnt?
Grüße
bastla
Das Ignorieren der Groß-/Kleinschreibung sollte diese geänderte Zeile 9 ermöglichen:
>>%G% echo M=a(1):O=a(2):For i=0 To UBound(T):If InStr(1,T(i),M,1)^>0 And InStr(1,T(i),O,1)=0 Then:WScript.Echo T(i)^&"!":End If:Next
Kann davon ausgegangen werden, dass der erste relevante Block mit dem Wort "interface" (am Zeilenanfang) beginnt?
Grüße
bastla
Hallo Erathy!
Versuch es mit dem Ersetzen der Zeile 8 durch
Damit sollten nur mehr Zeilen ab der ersten mit dem Wort "Interface" beginnenden Zeile erfasst werden.
Hinsichtlich des letzten Blocks bin ich mir noch nicht ganz sicher - wäre die gewünschte Vorgangsweise, keine weiteren Blöcke mehr auszugeben, wenn erstmals in einem Block der String "vlan1" enthalten war? In diesem Fall müsste die (bisherige) Zeile 9 durch
ersetzt werden.
Grüße
bastla
P.S.: Das Testen habe ich Dir überlassen
...
Versuch es mit dem Ersetzen der Zeile 8 durch
1
2
2
>%G% echo Set a=WScript.Arguments:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll
>>%G% echo P=InStr(1,T,vbCrLf^&"Interface",1):If P^>0 Then T=Mid(T,P+1):End If:T=Split(T,"!")
Hinsichtlich des letzten Blocks bin ich mir noch nicht ganz sicher - wäre die gewünschte Vorgangsweise, keine weiteren Blöcke mehr auszugeben, wenn erstmals in einem Block der String "vlan1" enthalten war? In diesem Fall müsste die (bisherige) Zeile 9 durch
1
2
2
>>%G% echo M=a(1):O=a(2):For i=0 To UBound(T):If InStr(1,T(i),M,1)^>0 And InStr(1,T(i),O,1)=0 Then
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then Exit For:End If:End If:Next
Grüße
bastla
P.S.: Das Testen habe ich Dir überlassen
Hallo Erathy!
Spät, aber doch, möchte ich Dich auf die Möglichkeit der ""-Formatierung hinweisen - macht geposteten Code besser lesbar und erleichtert die Bezugnahme auf einzelne Zeilen ...
Versuch es als Ersatz der letzten Scriptzeile
durch die folgenden beiden Zeilen
Grüße
bastla
Spät, aber doch, möchte ich Dich auf die Möglichkeit der ""-Formatierung hinweisen - macht geposteten Code besser lesbar und erleichtert die Bezugnahme auf einzelne Zeilen ...
Versuch es als Ersatz der letzten Scriptzeile
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then Exit For:End If:End If:Next
1
2
2
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then Exit For
>>%G% echo End If:Next
bastla
Hallo Erathy!
Grüße
bastla
es hört nicht bei "vlan1" auf. Es nimmt die Blöcke danach auch noch.
Kann ich nicht nachvollziehen (das VBScript habe ich inzwischen getestet) - prüfe bitte, ob die Schreibweise von "vlan1" im Script und in der Datei übereinstimmen und poste ggf ein Stück einer solchen Datei ...Grüße
bastla
Hallo Erathy!
Sollte eigentlich so
bzw so
gehen (ungetestet as usual
) ...
Grüße
bastla
Sollte eigentlich so
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off & setlocal
set /p Datei="Bitte Datei(en) waehlen: "
set /p SWort="Bitte Suchwort waehlen das vorhanden ist: "
set "Dateien=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\%Datei%"
set "Ergebnis=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\Ergebnis.txt"
set "G=%temp%\GetP.vbs"
>%G% echo Set a=WScript.Arguments:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll
>>%G% echo P=InStr(1,T,vbCrLf^&"Interface",1):If P^>0 Then T=Mid(T,P+1):End If:T=Split(T,"!")
>>%G% echo M=a(1):For i=0 To UBound(T):If InStr(1,T(i),M,1)^>0 Then
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then:Exit For:End If:End If:Next
del "%Ergebnis%" 2>nul
for %%i in ("%Dateien%") do (
echo %%i
echo\
cscript //nologo "%G%" "%%i" "%SWort%"
echo =================================
)>>"%Ergebnis%"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@echo off & setlocal
set /p Datei="Bitte Datei(en) waehlen: "
set /p SWort="Bitte Suchwort waehlen das _nicht_ vorhanden ist: "
set "Dateien=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\%Datei%"
set "Ergebnis=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\Ergebnis.txt"
set "G=%temp%\GetP.vbs"
>%G% echo Set a=WScript.Arguments:T=CreateObject("Scripting.FileSystemObject").OpenTextFile(a(0)).ReadAll
>>%G% echo P=InStr(1,T,vbCrLf^&"Interface",1):If P^>0 Then T=Mid(T,P+1):End If:T=Split(T,"!")
>>%G% echo O=a(1):For i=0 To UBound(T):If InStr(1,T(i),O,1)0 Then
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then:Exit For:End If:End If:Next
del "%Ergebnis%" 2>nul
for %%i in ("%Dateien%") do (
echo %%i
echo\
cscript //nologo "%G%" "%%i" "%SWort%"
echo =================================
)>>"%Ergebnis%"
Grüße
bastla