campari.s
Goto Top

Findstr kann Dateien nicht finden

Hallo,
ich bin, was das Erstellen von Batchdateien angeht, noch ein blutiger Laie.
Zwar konnte ich mit Hilfe dieses Forums schon mehrfach kleinere Scripte erfolgreich zusammenbasteln, aber im Moment habe ich ein Problem, dass ich selbst nicht lösen kann und hoffe nun, dass mir hier jemand weiterhelfen kann..

Aber nun zum eigentlichen Problem:

Auf einem Server liegen in einem Ordner mehrere hundert Textdateien (xxxxx.txt).
Diese Testdateien möchte ich nun nach einer bestimmten Zeichenfolge durchsuchen.
Wird die Zeichenfolge gefunden, soll der Name der Datei (möglichst ohne Dateiendung) in eine neue Textdatei (z.B. Liste1.txt) geschrieben werden.
Die Datei "Liste1.txt" soll also hinterher alle Dateinamen enthalten, in denen die gesuchte Zeichenfolge gefunden wurde.

Nun konnte ich, mit Hilfe dieses Forums hier, ein Script zusammenstellen, welches die geforderten Aufgaben zwar erfüllt, aber nur, solange das Script im selben Ordner liegt, wie die zu durchsuchenden Textdateien.

Hier das Script:

@echo off
for /f "delims=" %%a in ('dir /A /B *.txt') do (  
for /f %%b in ('findstr /i "blabla" "%%~a"') do echo %%~na >> .\auswertung\Liste1.txt  
)

Aus bestimmten Gründen möchte ich das Script aber nicht in dem Ordner auf dem Server ablegen sondern von meinem Client aus starten.

Dazu habe ich auf meinem Client ein Laufwerk zu dem entsprechenden Server verknüpft und das Script in Zeile 2 um den Pfad, in dem die Textdateien stehen erweitert:

@echo off
for /f "delims=" %%a in ('dir /A /B N:\xxxx\xxxx\*.txt') do (  
for /f %%b in ('findstr /i "blabla" "%%~a"') do echo %%~na >> .\auswertung\Liste.txt  
)

Leider funktioniert das Script nicht wie gewünscht.

Zwar greift das Script im ersten Teil auf die Textdateien auf dem Server zu, "übergibt" aber nur den Dateinamen an den zweiten Teil.
'findstr' sucht jetzt die Dateien in dem Verzeichnis, aus dem das Script gestartet wurde, kann Diese nicht finden und gibt eine entsprechende Meldung aus.

Ich habe nun schon mehrere Stunden recherchiert. Vielleicht hatte ich die Lösung auch schon vor Augen, kann das Gelesene aber leider nicht in meinem Problem umsetzen.

Es wäre deshalb sehr nett, wenn mir jemand ein paar Tipps geben könnte.

Herzlichen Dank

campari.s

Content-Key: 169489

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

Printed on: April 25, 2024 at 00:04 o'clock

Member: Skyemugen
Skyemugen Jul 11, 2011 at 12:44:44 (UTC)
Goto Top
Aloha,

tja logisch, der Schalter /B nimmt dir sämtliche Pfade face-wink einfaches Format

Dein Schalter /A nebenbei bemerkt, erfüllt keinen Zweck, da du nichts spezifisches angibst ...

greetz André

P.S.: Ich liege doch richtig, dass du nur ein paar Tipps wolltest und keine Lösung? *fg* ... gut, als weiteren Tipp wäre da eventuell noch: willst du nicht eigentlich %%~nb in die Liste?

gut, als Lösungsmöglichkeit wäre da "Pfad\%%~a", wenn alles eh nur in einem bekannten Ordner sich befindet oder dir ohne Schalter /B dafür mit skip= und findstr /v oder, oder, oder

[OT] Ich weiß noch, mein erster Thread hier, weswegen ich mich auch anmelden musste, war aufgrund des /B-Schalters *gg*[/OT]

edit: hmm der Schalter /m von Friemler gefällt mir, muss ich mir glatt merken ^_^
Member: Friemler
Friemler Jul 11, 2011 at 13:11:59 (UTC)
Goto Top
Hallo campari.s,

wenn Du schon ein Netzlaufwerk erstellt hast, ließe sich das mit einem Oneliner lösen:
findstr /i /m "blabla" "N:\xxxx\xxxx\*.txt" > ".\Auswertung\Liste.txt"
Der Parameter /m sorgt dafür, dass nur die Namen der Dateien, in denen der Suchbegriff gefunden wird, ausgegeben wird. Du kannst sogar mehrere Suchbegriffe angeben, die durch Leerzeichen voneinander getrennt sind. Der Suchbegriff wird bei dieser Syntax als Regulärer Ausdruck behandelt (siehe FINDSTR /?). Um das zu verhindern, füge den Parameter /l hinzu.

Wenn Du nur einen Suchbegriff hast, der aber Leerzeichen enthält, musst Du folgendes verwenden:
findstr /i /m /c:"bla bla" "N:\xxxx\xxxx\*.txt" > ".\Auswertung\Liste.txt"
Um in diesem Fall die Möglichkeit zu haben, mehrere Suchbegriffe zu suchen, gib /c:"xxx" mehrmals an oder erstelle eine Datei mit Suchbegriffen, die Du mit dem Parameter /G:"Dateiname" übergibst. Um dann noch den/die Suchbegriff(e) als Regulären Ausdruck zu behandeln, musst Du zusätzlich den Parameter /r angeben.

Gruß
Friemler
Member: pieh-ejdsch
pieh-ejdsch Jul 11, 2011 at 13:12:25 (UTC)
Goto Top
moin,

kann mann auch mal auf der cmd Abfeuern

(for /f "tokens=1,2 delims=:" %i in ('findstr /b ":" "L:\D (A Bearbeitung)\CMD Befehle\*.cmd"') do findstr /x /c:"%i:%j" "Datei.x" >nul || >&3 echo %i:%j)3>Datei.x  

und nur eine Zeile Pro Datei

Gruß Phil
Member: pieh-ejdsch
pieh-ejdsch Jul 11, 2011 at 13:20:20 (UTC)
Goto Top
moin Friemler,

hach sowas - es gibt ja schon einen Schalter im Findstr dafür

ich sollte doch mal /? benutzen

Gruß Phil
Member: campari.s
campari.s Jul 11, 2011 at 14:54:35 (UTC)
Goto Top
Herzlichen Dank, für Eure Hilfsbereitschaft. face-smile

@Friemler

Deinen Vorschlag mit dem Einzeiler habe ich schon gekannt und bisher auch so im Einsatz.

Leider werden dabei immer die kompletten Pfade incl. Dateiname und Dateiendung in 'Liste.txt' geschreiben, weshalb ich vor der Weiterverarbeitung der Datei diese immer zuerst mit einem Editor bearbeiten muß, damit nur noch die reinen Dateinamen ohne Pfad und ohne Dateierweiterung in der Liste stehen.

Die Lösungsansätze von André und Phil kann ich teils nachvollziehen und teils verwirren sie mich noch mehr. Hab Einiges davon getestet - bisher leider ohne Erfolg.

Werd mich in den nächsten Tagen nochmals mit dem Problem beschäftigen, muss mich zwischdurch aber erstmal um einige andere Probleme kümmern, die täglich so auflaufen - aber wem erzähl ich das face-wink

Nochmals herzlichen Dank

LG

Werner
Member: Friemler
Friemler Jul 11, 2011 at 16:34:21 (UTC)
Goto Top
Hallo Werner,

dann machen wir doch noch ein Schleifchen drumherum face-wink . Allerdings wird es dann (weil ich keine Bandwurmzeilen mag) ein Threeliner:
@(for /f "delims=" %%f in ('findstr /i /m "blabla" "N:\xxxx\xxxx\*.txt"') do @(  
   echo %%~nf
)) > ".\Auswertung\Liste.txt"  

Dadurch wird nur noch der Dateiname ohne Dateierweiterung in die Zieldatei geschrieben. Entscheidend dafür ist das n bei %%~nf in Zeile 2. Siehe FOR /?.

Gruß
Friemler


[EDIT]
Script nochmal geändert, damit bei keinem Fund auch keine Ausgabedatei entsteht.
[/EDIT]
Member: campari.s
campari.s Jul 12, 2011 at 12:04:51 (UTC)
Goto Top
Hallo Friemler,

hab erst heute Morgen gesehen, dass Du gestern nochmals geantwortet hast.

Hab das vorhin kurz getestet und muß sagen - Du bist mein Held. face-smile

Funktioniert wunderbar und macht genau das, was ich mir vorgestellt habe.

Wirklich prima finde ich auch Deine Art Dinge zu erklären, so dass sie auch ein Greenhorn wie ich nachvollziehen kann.

Das soll jetzt keine Kritik an Euch sein, André und Phil. Aber Eure Beiträge hätte ich nur so schnell nicht umsetzen können.

Besonders der von Phil ist schon harter Tobak für jemanden mit meinem Kenntnisstand.
Werde aber trotzdem vesuchen, das Knäuel zu entwirren . face-wink

Nochmals herzlichen Dank an alle für Eure Hilfsbereitschaft.

Das Thema werde ich als gelöst markieren.


LG
Werner
Member: Skyemugen
Skyemugen Jul 12, 2011 at 12:36:05 (UTC)
Goto Top
Aloha Werner,

bei mir ist es meist so, dass ich erst einmal etwas ohne große Erklärung poste und dann auf Nachfrage Erklärungen/weitere Details erst abgebe ^_^

greetz André