ultraschnecke
Goto Top

Linux find unter Windows

Hallo,

meine Windows-Batch-Kenntnisse sind relativ bescheiden face-sad

Ich suche ein äquivalent für den Linux Befehl "find", genauer gesagt will ich folgenden Befehl auf die Windows commandline "übersetzen"

find -type f -name "*.txt" -exec COMMAND {} \;

für COMMAND soll eine EXE aufgerufen werden in der Art "command.exe text.txt"

Danke für Ideen und Gruß

Content-Key: 32727

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

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

Member: ratzla
ratzla May 17, 2006 at 16:38:03 (UTC)
Goto Top
Zwei Möglichkeiten:
1. cygwin installieren - damit hast Du auch den find befehl

2. Indexdienst benutzen (Suche über Explorer - ggf. mit erweiterten Opionen) - leider findet der manchmal nicht so genau das was man will.
Member: Biber
Biber May 17, 2006 at 17:28:14 (UTC)
Goto Top
Na,
das würde ich so übertrieben wie ratzla nicht formulieren...

Verwirrend an der folgende Zeile (wenn man/frau von der *NIX-Seite kommt) ist, dass der CMD-Prompt keinen find-Befehl hat, der sich AUF Dateien bezieht.
Der CMD-Find-Befehl bezieht sich nur auf die Suche in Dateien (das, was anderswo der grep übernimmt.

Dateien finden ist unter dem CMD-Interpreter immer irgendeine DIR-Variante.
Bei der Suche über ein ganzes Laufwerk liefert ein "dir /s /b [Lw:\pfad\]Dateimaske" alle Dateien auch in allen Unterverzeichnssen und zwar nur deren Namen (ohne Größe, Owner
etc).

Diese Liste wiederum kannst Du per angedeuteter FOR--IN..DO-Anweisung zur weiteren Verarbeitung übergeben, z.B. an eine *.Exe

Beispiel:
for /F "delims=" %i in ('dir /b /s \*.txt') do @find "blank" "%i"  

...würde alle Dateien *.txt auf dem aktuellen Laufwerk übergeben an die find.exe, die darin nach dem String "blank" sucht.

Wäre schon das Beisriel, was Du meintest - Du könntest also auch alle diese gefundenen Dateien an ein Zip-Tool.exe oder einen Virus-Check.exe oder an eine Editor.exe senden.

Zum besseren Verständnis am Besten den Zwischenschritt am CMD-Prompt machen:
for /F "delims=" %i in ('dir /b /s \*.txt') do @echo %i  
...dann siehst Du, was ich mit der Liste meine, die so an STDOUT übergeben wird.
Die Liste sieht exakt aus wir ein "dir /b /s \*.txt" OHNE FOR..IN..DO drumherum, hat aber einzelneAusgabe-Parameter, die ich einzeln einer *.exe zuschanzen kann.

Statt mit echo etwas an die Console zu übergeben, kannst Du also diese Dateinamen auch einer *.exe,*.vbs, *.bat,...einer ausführbaren Datei übergeben.

Hope That Helps
Biber
Member: Ultraschnecke
Ultraschnecke May 18, 2006 at 11:07:05 (UTC)
Goto Top
Das geht zwar vollkommen anders, aber ist genau das was ich suche.

DANKE!!!!!
Member: sfried100
sfried100 Mar 05, 2007 at 14:34:52 (UTC)
Goto Top
Hallo!

Habe erst wenige Beiträge in diesem Forum gelesen und die Frage wurde vielleicht bereits an anderer Stelle behandelt.
Wie kann man das Problem mit find mit den Dateinamen mit Leerzeichen "My documents" in den Griff bekommen?
Habe auf meinem Rechner keine Administratorrechte (keine exe ausführen, kein regedit etc.).

Liebe Grüße
sfried
Member: Ultraschnecke
Ultraschnecke Mar 05, 2007 at 20:26:52 (UTC)
Goto Top
Hmm ist schon ne Weile her, aber normalerweise kann man das Leerzeichen entweder mit Escape-Zeichen ersetzen oder den Pfad in Anführungszeichen verpacken... Vielleicht hilft Dir diese im-Nebel-stocher-Antwort face-wink

Gruß
Member: Biber
Biber Mar 05, 2007 at 20:54:46 (UTC)
Goto Top
@sfried100,

Ultraschnecke hat vollkommen recht: Pfad-/Dateinamen mit Leerzeichen werden in Anführungszeichen eingeschlossen.

Beispiele:
find "suchstring" "d:\Biber\Eigene Dateien\*.txt"
findstr "suchstring" "C:\Dokumente und Einstellungen\Biber\*.*"

Du findest einige Beispiele z.B. im Bereich "Batch & Shell" über die Forumssuche.

Gruss
Biber
Member: sfried100
sfried100 Mar 05, 2007 at 21:01:18 (UTC)
Goto Top
Hallo Ultraschnecke und Biber, vielen Dank für die prompten Antworten.
Werde morgen den Tipp anwenden.

Gruß
sfried100