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:
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:
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 169489
Url: https://administrator.de/forum/findstr-kann-dateien-nicht-finden-169489.html
Ausgedruckt am: 16.05.2025 um 17:05 Uhr
8 Kommentare
Neuester Kommentar
Aloha,
tja logisch, der Schalter /B nimmt dir sämtliche Pfade
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
gut, als Lösungsmöglichkeit wäre da
[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
tja logisch, der Schalter /B nimmt dir sämtliche Pfade
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 ^_^
Hallo campari.s,
wenn Du schon ein Netzlaufwerk erstellt hast, ließe sich das mit einem Oneliner lösen:
Der Parameter
Wenn Du nur einen Suchbegriff hast, der aber Leerzeichen enthält, musst Du folgendes verwenden:
Um in diesem Fall die Möglichkeit zu haben, mehrere Suchbegriffe zu suchen, gib
Gruß
Friemler
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"
/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"
/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
Hallo Werner,
dann machen wir doch noch ein Schleifchen drumherum
. Allerdings wird es dann (weil ich keine Bandwurmzeilen mag) ein Threeliner:
Dadurch wird nur noch der Dateiname ohne Dateierweiterung in die Zieldatei geschrieben. Entscheidend dafür ist das
Gruß
Friemler
[EDIT]
Script nochmal geändert, damit bei keinem Fund auch keine Ausgabedatei entsteht.
[/EDIT]
dann machen wir doch noch ein Schleifchen drumherum
@(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]