erathy
Goto Top

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

Content-Key: 136759

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

Printed on: April 16, 2024 at 19:04 o'clock

Member: Biber
Biber Feb 24, 2010 at 13:40:37 (UTC)
Goto Top
Moin Erathy,

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
Member: bastla
bastla Feb 24, 2010 at 13:44:05 (UTC)
Goto Top
Hallo Erathy und willkommen im Forum!

Dazu würde ich einen Batch mit etwas VBS verwenden:
@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%"  
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:
>%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  
[Edit]

Grüße
bastla

[Edit] @Biber: Im Vergleich zu mir hast Du Dir den Beinamen "der Geduldige" tatsächlich verdient ... face-wink [/Edit]
Member: Erathy
Erathy Feb 24, 2010 at 14:00:17 (UTC)
Goto Top
Danke für die schnellen Antworten.

Zum Thema:

Ob es ein Tool oder ein Batch ezt. ist, ist mir eigentlich egal. Ich habe einen Ordner in dem über 40 Textdateien liegen die alle so aufgebaut sind und möchte nach der Abfrage das Ergebnis irgendwie ausgiebt. Am liebsten wäre mir es wenn es mir sofort anzeigen würde wo es fehlt also ich kann sagen " suche in Datei "xxx" und zeig mir alle Blöcke wo nicht "dot 1x" vorhanden ist.

Gruß Erath
Member: bastla
bastla Feb 24, 2010 at 14:22:18 (UTC)
Goto Top
Hallo Erathy!
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 face-wink - 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
notepad "%Ergebnis%"
hinzufügen) ...

Grüße
bastla
Member: Erathy
Erathy Feb 24, 2010 at 15:00:28 (UTC)
Goto Top
Danke nochmal für die Antwort.

Ich habe die Batch gerade zum testen ein wenig modifiziert und die Zeilen:

set Auswahl=0
set /p Auswahl="Bitte Textdatei Waehlen: "

hinzugefügt und den Pfad mit der Variable ersetzt.

So muss ich jetzt immer den Namen der Textdatei eingeben und er erstellt mir dann das textfile wo die Blöcke drinstehen die dot 1x nicht enthalten.


Kann man die Bedienung vielleicht noch erleichtern indem ich die Datei auswählen kann und nicht den exakten Namen schreiben muss?

Was mir noch aufgefallen ist, wenn ich Namen habe die Leerzeichen enthalten nimmt er mir nur den letzten Teil des Namens.

Gruß Erath
Member: bastla
bastla Feb 24, 2010 at 15:30:29 (UTC)
Goto Top
Hallo Erathy!

Wenn Du auswählen willst, dann bietet sich "Drag & Drop" an - dazu einfach anstelle von
set /p Auswahl="Bitte Textdatei Waehlen: "
die Zeile
set "Auswahl=%~1"
verwenden.
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
Member: Erathy
Erathy Feb 24, 2010 at 15:33:24 (UTC)
Goto Top
So,

ich habe jetzt nochmal einwenig herumprobiert und habe herausgefunden das ich bei der Eingabe kein z.B. " *.* " benutzen kann. Ist das nicht möglich? Wenn es möglich ist kann man auch nach " test*.* " suchen ? Das würde mir sehr helfen wenn ich mehrere Textdateien mit * auswählen könnte.

edit.:

Meine Datei schaut nun so aus :

@echo off & setlocal

set "Auswahl=%~1"


set "Datei=I:\Dateien\Programme\Dateidurchsuchung\Testsuche\%Auswahl%"
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%"

und ich bekomme bei starten den Fehler:

C:\Temp\GetP.vbs(1, 1) Laufzeitfehler in Microsoft VBScript: Der Pfad wurde nicht gefunden.


Gruß Erath
Member: bastla
bastla Feb 24, 2010 at 16:03:34 (UTC)
Goto Top
Hallo Erathy!

Versuch es damit:
@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%"  
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:
@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%"  
Grüße
bastla
Member: Erathy
Erathy Feb 25, 2010 at 07:20:29 (UTC)
Goto Top
Hallo bastla!

Es funktioniert super. Danke für die Hilfe!

Gruß Erath
Member: bastla
bastla Feb 25, 2010 at 16:15:44 (UTC)
Goto Top
Hallo Erathy!

Aufgrund Deiner Nachfrage per PN: Um die Blöcke anzuzeigen, in denen der Suchbegriff enthalten ist, verwende die folgende Zeile 7:
>>%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 
Grüße
bastla
Member: bastla
bastla Feb 26, 2010 at 14:58:58 (UTC)
Goto Top
... und noch eine Ergänzung: Um das "!" am Ende jeden Blocks auch wieder auszugeben, wäre die obige Zeile wie folgt zu ändern:
>>%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
Grüße
bastla
Member: Erathy
Erathy Mar 01, 2010 at 07:03:54 (UTC)
Goto Top
Hallo nochmal,

ich habe die Blöcke jetzt ausgetauscht und es funktioniert wie ich es wollte. Ich habe jetzt einfach 2x das ganze Programm nacheinader mit jeweil einmal der Zeil mit dem Suchwort das vorhaden ist und einmal mit der Zeil mit dem Suchwort das nicht vorhaden ist. Ich lasse das Programm anch dem ersten Suchdurchlauf eine Textdatei erstellen und suche im 2ten Durchlauf nur in dieser Textdatei. Das funktioniert aber dadurch habe ich das Problem das wenn ich mehrere Dateinen auswähle wie "*.txt" wird mir nach dem ersten Suchdurchlauf in Textdatei noch richtig erstellt mit der jeweiligen Zeile in welcher Textdatei gesucht wurde. Die Textdatei nach dem 2ten Suchdurchlauf macht dies aber nichtmehr das sie nur die Zwischenergebnis Textdatei durchsucht.

Ist es möglich es so umzubauen das ich den Pfad immer noch habe oder vielleich sogar ohne die Zwischenergebnis Datei ?
Member: bastla
bastla Mar 01, 2010 at 13:34:10 (UTC)
Goto Top
Hallo Erathy!

Kannst Du bitte nochmals beschreiben, wie der gesamte Ablauf aussehen soll?

Wie ich es derzeit verstehe, sollen mehrere Textdateien einzeln durch zwei UND-verknüpfte Suchvorgänge gefiltert werden - was soll aber dann mit dem Ergebnis passieren?

Grüße
bastla
Member: Erathy
Erathy Mar 01, 2010 at 16:19:11 (UTC)
Goto Top
Hallo bastla!

Also es startet am Anfang eine Abfrage welcher "Name1" vorhanden sein soll, danach eine Abfrage welcher "Name2" nicht vorhanden sein soll (im jeweiligen Block der mit "!" getrennt.

Dann kommt die Abfrage welche Datei ich durchsuchen möchte. Hier wird einfach der Name eingegeben oder zB.: test*.txt und somit alle Dateien die mit test beginnen ausgewertet.


Am Schluss soll es mir die Blöcke anzeigen indenen "Name1" vorhanden und "Name2" nicht vorhanden ist.

Gruß Erath
Member: bastla
bastla Mar 02, 2010 at 15:12:30 (UTC)
Goto Top
Hallo Erathy!

Bis zum "--------" war ich gedanklich schon - offen ist aber immer noch die Frage, in welcher Form das Ergebnis angezeigt werden soll, wenn Du mehrere Dateien auswertest - eine große (Gesamt-)Ergebnisdatei, oder für jede Datei eine einzelne Ergebnisdatei?

Grüße
bastla
Member: Erathy
Erathy Mar 02, 2010 at 15:56:45 (UTC)
Goto Top
Als Ergebnis soll EINe Textdatei erstellt werden indem immer der Pfad angegeben wird aus welcher Textdatei das Ergebnis ist. Wie bei der Suche oben wo ich nur nach einem Suche und in mehreren Dateien, da steht am Anfang immer der Pfad der Textdatei und wenn diese fertig ist der Pfad der Nächsten Textdatei usw.

Bsp:

xxxxx\test1.txt

die Blöcker


xxxx\test2.txt

Blöcke

usw.


Gruß Erath
Member: bastla
bastla Mar 02, 2010 at 16:52:14 (UTC)
Goto Top
Hallo Erathy!

Na dann:
@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%"  
[Edit] Aufrufparameter in Zeile 15 richtig gestellt [/Edit]

Grüße
bastla
Member: Erathy
Erathy Mar 04, 2010 at 07:05:41 (UTC)
Goto Top
Hallo bastla,

wenn ich bei "Mit=XXXXX" statt den XXX ein wort udn das selbe bei "Ohne=XX" machen kommt bei mir

C:\Temp\GetP.vbs(2, 8) Laufzeitfehler in Microsoft VBScript: Index außerhalb des gültigen Bereiches

Der Fehler kommt glaube ich sooft wie ich verschiedene Dateine auswählen "test*.txt" kommen 2 Fehler da ich 2 Dateien habe die mit test Beginnen. Bei *.txt kommen 4 Fehler und ich habe 4 Textdateien in dem Ordner.

Gruß Erath
Member: bastla
bastla Mar 04, 2010 at 07:43:51 (UTC)
Goto Top
Hallo Erathy!

Ändere (ich mach' es oben auch) die Zeile 15 auf
cscript //nologo "%G%" "%%i" "%Mit%" "%Ohne%"
Grüße
bastla
Member: Erathy
Erathy Mar 05, 2010 at 15:52:16 (UTC)
Goto Top
Hallo bastla,

jetzt funktioniert es, und mir ist noch aufgefallen das wenn ich eine Suche mit "*.txt" starte (in dem ordner fefinden sich 3 Textdateien "test1.txt | test2.txt | Text.txt ") er mir die erste Datei test1.txt 2x in das Ergebnissfile einträgt.

Gruß Erath
Member: Erathy
Erathy Apr 19, 2010 at 06:40:10 (UTC)
Goto Top
Hallo,

ich habe das Batch nun schon ein wenig in Betrieb gehabt und bin noch auf folgende Probleme gestoßen,

1. Bei der Eingabe welche Wörte ich suche / nicht suche muss die Groß- und Kleinschreibung beachtet werden.
Gibt es da eine möglichkeit dies zu ignorieren ?

2. Ich habe neu Textdateien die einen header haben und das Batch unterteilt mir den Header auch und Sucht mir dort auch die Ergebnisse.
Ist es möglich das das Batch erst ab einer bestimmten Stelle (z.B. wenn das erste mal "interface" steht) anfängt die blöcke zu unterteilen und auch bei einem bestimmten Wort aufhört (z.B. wenn "vlan1" im Text vorkommt, da dies immer im letzten Block steht)?

Gruß Erath
Member: bastla
bastla May 14, 2010 at 12:37:10 (UTC)
Goto Top
Hallo Erathy!

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
Zu 2.
Kann davon ausgegangen werden, dass der erste relevante Block mit dem Wort "interface" (am Zeilenanfang) beginnt?

Grüße
bastla
Member: Erathy
Erathy May 17, 2010 at 07:32:09 (UTC)
Goto Top
Hallo bastla!

Ja, der erste relevante Block beginnt mit "Interface".

Gruß Erath
Member: bastla
bastla May 22, 2010 at 13:40:26 (UTC)
Goto Top
Hallo Erathy!

Versuch es mit dem Ersetzen der Zeile 8 durch
>%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,"!")  
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
>>%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  
ersetzt werden.

Grüße
bastla

P.S.: Das Testen habe ich Dir überlassen face-wink ...
Member: Erathy
Erathy May 25, 2010 at 06:02:38 (UTC)
Goto Top
Hallo bastla,

ich habe Zeile 8 nun ersetzt und es funktioniert super.

Wenn ich aber Zeile 9 ersetzte (es schaut dann so aus :

%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):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

)


kommt ein Fehler :

C:\Temp\GetP.vbs(4, 73) Kompilierungsfehler in Microsoft VB Script : Muss die erste Anweisung in der Zeile sein

Ich kann damit nicht viel anfangen und habe nichts hilfreiches im internet gefunden.

Wäre nett wenn du mir wiedereinmal helfen könntest.

Danke!

Gruß Erath
Member: bastla
bastla May 25, 2010 at 09:31:11 (UTC)
Goto Top
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
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then Exit For:End If:End If:Next
durch die folgenden beiden Zeilen
>>%G% echo WScript.Echo T(i)^&"!":If InStr(1,T(i),"vlan1",1)^>0 Then Exit For  
>>%G% echo End If:Next
Grüße
bastla
Member: Erathy
Erathy May 25, 2010 at 14:07:23 (UTC)
Goto Top
Hallo bastla,

danke für den Tipp mit der "Code"-Formatierung ich werde sie in Zukunft nutzen.

Ich hab es nun getestet und es kommt kein Fehler mehr. Es fängt erst ab dem ersten "interface" an ABER es hört nicht bei "vlan1" auf. Es nimmt die Blöcke danach auch noch.

Gruß Erath
Member: bastla
bastla May 25, 2010 at 14:17:24 (UTC)
Goto Top
Hallo Erathy!
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
Member: Erathy
Erathy Jun 08, 2010 at 06:57:36 (UTC)
Goto Top
Hallo bastla,

ich habe es nun mit einer neun Testdatei getestet. Dort funktioniert es, das es bei "vlan1" aufhört. Bis jetzt funktioniert alles super.

Danke !

Gruß Erathy
Member: Erathy
Erathy Jun 10, 2010 at 09:24:34 (UTC)
Goto Top
Hallo bastla,

ich habe gerade versucht die Zeilen in die 2 Batch-Dateien einzusetzten indenen ich nur "Vorhanden" oder "Nicht Vorhaden" suche (also 2 einzelne die nur jeweils das eine machen und nicht zusammen).

Ich habe versucht die Zeilen mit der Groß- und Kleinschreibung, die das es erst ab Interface anfängt und die das es bei "vlan1" aufhört so abzuändern das es funktionier doch es bringt mir immer Fehler. Mein code der dateinen schaut nun so aus:

Suche für ein wort das vorhanden ist :

@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 "Suche=%Swort%"  
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.
    echo ============================================================================================
    echo ============================================================================================
    echo.
    echo.

)>>"%Ergebnis%"  

Suche für ein Wort das nicht vorhanden ist :

@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 "Suche=%Swort%"  
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 ============================================================================================
    echo ============================================================================================
    echo.

)>>"%Ergebnis%"  

Ich habe schon versucht die Zeilen ein wenig abzuändern und Sachen wegzulassen aber es hat nie funktioniert.

Gruß Erath
Member: bastla
bastla Jun 12, 2010 at 17:04:51 (UTC)
Goto Top
Hallo Erathy!

Sollte eigentlich so
@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%"  
bzw so
@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%"  
gehen (ungetestet as usual face-wink) ...

Grüße
bastla