15 votes

Visual studio Trouver les fichiers qui ne contiennent PAS de X

J'ai besoin d'un moyen de répertorier tous les fichiers qui font NO contiennent un texte connu.

Le projet contient plus de 1000 fichiers et je ne veux que ceux qui ne contiennent pas de texte.

J'ai pensé aux expressions régulières, mais il n'y a pas cette fonctionnalité.

Quelqu'un connaît-il une solution ?

22voto

shannon Points 1979

Depuis une invite de commande :

@for /r %f in (FILE_SPECIFIER) do @find "YOUR_STRING" "%f" > nul || echo %f

Par exemple :

C:\web-trunk\Views>@for /r %f in (*.cshtml) do @find "Layout" "%f" > nul || echo %f

C:\data\web-trunk\Views\Account\RegisterPartial.cshtml
C:\data\web-trunk\Views\Admin\SiteInspector.cshtml
C:\data\web-trunk\Views\CandidateProfile\View.cshtml
C:\data\web-trunk\Views\Common\ContactFooterForInfoEmails.cshtml
C:\data\web-trunk\Views\Common\ContactFooterForInfoPages.cshtml
C:\data\web-trunk\Views\Common\ContactFooterForSalesEmails.cshtml
C:\data\web-trunk\Views\Common\ContactFooterForSalesPages.cshtml

La documentation de Microsoft sur cette méthode peut aider à trouver le meilleur terme de recherche de fichiers pour vous.

4voto

jeroenh Points 12777

MISE À JOUR : comme Peter McVoy l'a signalé, cette solution ne fonctionne pas. Elle renverra des faux positifs (les fichiers qui contiennent une ligne sans le texte à rechercher seront également imprimés). Une macro VS ou un script powershell personnalisé est probablement la voie à suivre. Je pourrais revenir sur cette réponse plus tard.

Pour référence, voici ma réponse :

Vous pouvez le faire en ligne de commande :

findstr /S /V /M text_to_search_for *.cs

Ceci imprimera tous les noms de fichier qui ne contiennent pas le texte

3voto

Devendra D. Chavan Points 4707

Vous pouvez utiliser le Rechercher dans les fichiers caractéristique de notepad++ .

Des pas :

  1. Tapez le mot que vous voulez trouver et sélectionnez le répertoire.
  2. Copiez le résultat de la recherche.
  3. Filtrez-le pour récupérer la liste des fichiers contenant le mot.
  4. Et ensuite exécuter une simple boucle en C# pour obtenir la liste des fichiers qui ne sont pas dans cette liste. Ce sont les fichiers qui ne contiennent pas le mot.

Voici la boucle pour obtenir la liste des fichiers est (recherche dans .cs ) (peut être optimisé) :

private void GetFileNamesNotContainingWord(string filePath, string searchDirectoryPath, string notContainingFilePath)
{
    string[] lines = File.ReadAllLines(filePath);
    List<string> filesList = new List<string>();

    foreach (string line in lines)
    {
        if (!line.StartsWith("\t"))
        {
            filesList.Add(line.Substring(0, line.LastIndexOf('(')).Trim());
        }
    }

    List<string> notContainedFiles = new List<string>();
    foreach (FileInfo file in new DirectoryInfo(searchDirectoryPath).GetFiles("*.cs", SearchOption.AllDirectories))
    {
        if (!filesList.Contains(file.FullName))
        {
            notContainedFiles.Add(file.FullName);
        }
    }

    File.WriteAllLines(notContainingFilePath, notContainedFiles.ToArray());
}

1voto

Ekkehard.Horner Points 19117

Utilisez trouver o findtr à partir d'une fenêtre de commande ("boîte DOS").

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X