web-dev-qa-db-fra.com

Comment rechercher (récursivement) TOUS les contenus de fichiers dans Windows 7?

Comment rechercher (récursivement) le contenu des fichiers tous dans Windows 7? J'utilise le content:xxx, dans la commande Search settings dans l'Explorateur Windows, pour rechercher xxx dans cet exemple. Cela ne fonctionne pas:

Comme exemple de la façon dont cette recherche est interrompue, je vois un org.Eclipse.wst.common.component fichier avec le texte que je recherche et Windows 7 ne le renvoie pas dans les résultats. Je suppose que cela ne fait que rechercher des types de fichiers texte connus. Comment puis-je faire rechercher tous les fichiers? J'ai besoin de trouver tout ce que je cherche.

P.S. S'il existe une solution DOS, je l'accepterai également. Peut-être un fichier batch utilisant dir /s /b et findstr pourraient être construits.

EDIT: A noté mon besoin d'une recherche récursive.

25
Xonatron

Voici ma solution à trois fichiers DOS, mais je suis toujours à la recherche d'une bonne solution Windows 7 si quelqu'un en a une:

1. search.bat

@ECHO off
FOR /r %%a IN (*.*) DO CALL process.bat %%a

Recherche tous les fichiers de manière récursive et exécute process.bat sur chacun.

2. process.bat

@ECHO Off
ECHO "%1" >> output.txt
TYPE "%1" | FINDSTR /i "search_string_here" >> output.txt

Imprime le nom de chaque fichier, entre guillemets car certains fichiers vont casser le code de fichier batch sans, puis trouve la chaîne de recherche, search_string_here, et imprime la ligne entière dans laquelle se trouve la chaîne de recherche.

3. output.txt (exemple de sortie)

Contient la sortie, formatée comme suit, en recherchant search_string_here dans mon project_name Java stocké dans D:\project_name\, affichant tous les fichiers recherchés ainsi que les résultats s'il y en a:

"D:\project_name\.classpath" 
"D:\project_name\.project" 
    <name>search_string_here</name>
"D:\project_name\content_search_all_files.bat" 
"D:\project_name\output.txt" 
    <name>search_string_here</name>
"D:\project_name\pom.xml" 
...

Ci-dessus, vous pouvez voir que search_string_here a été trouvé, la ligne complète étant <name>search_string_here</name>, dans D:\project_name\.project fichier ... entre autres résultats.

Encore une fois, je suis toujours à la recherche d'une bonne solution Windows 7 si quelqu'un en a une.

Avertissement: "La ligne est trop longue" Erreurs; FINDSTR peut être bogué:

Apparemment, FINDSTR <grep, comme si vous ne le saviez pas. Voici un article qui plonge dans l'erreur dans FINDSTR qui ne se reproduit pas lorsque la même entrée est utilisée dans un fichier différent:

De toute évidence, "la ligne est trop longue" est un message fourre-tout pour un certain nombre d'erreurs différentes. FINDSTR a quelques problèmes. Il y a quelque temps, j'ai dit que FINDSTR était légèrement utile. Après aujourd'hui, je dirais que c'est encore moins utile que je ne le pensais à l'époque. - http://blog.mischel.com/2008/10/14/copying-large-files-on-windows/

4
Xonatron

"user3245549" a raison:

Toutes les réponses ci-dessus avec "pour les boucles" et les fichiers de chauve-souris imbriqués sont des jumbo mumbo. Tout ce dont vous avez besoin est d'utiliser simplement "findstr" - exemple:

C:\temp> findstr /S /C:"/work" * | more   <-- this will find the string "/work" in any file

ou

C:\temp> findstr /S /C:"/work" "*.*" | more 

ou

C:\temp> findstr /S /C:"/work" * > results.txt

ou

C:\temp> findstr /S /C:"/work" "*.*" > results.txt

REMARQUE: Vous pouvez laisser de côté les "guillemets doubles" autour des astérisques - je les mets simplement parce que l'éditeur ici sur Stackoverflow supprimait les astérisques de chaque côté de la période. NOTEZ AUSSI: Pour autant que je sache, vous avez toujours besoin des guillemets autour du "texte de chaîne" que vous recherchez.

37
joe

Si vous recherchez une solution basée sur une interface graphique dont vous n'avez pas à vous souvenir de la syntaxe, essayez Notepad ++. Il y a un menu Rechercher qui vous permet de rechercher des fichiers dans un répertoire (trouver dans les fichiers), de le limiter à certaines extensions (filtre) et de regarder dans les sous-dossiers, puis vous cliquez simplement sur l'élément dans la liste et il ouvre ce fichier pour Éditer.

32
Bill - K5WL

Utilisez la commande findstr à partir d'une fenêtre d'invite de commandes.

/ s vous donne une recherche récursive

/ i ignore le cas

8
user3245549

Cela peut être fait via l'invite de commande, bien que la syntaxe soit assez verbeuse

for /r %a in (\*.*) do find "search_text" %a

Cela fonctionne maintenant dans Windows 7 (point supplémentaire supprimé)

3
Pauline