14 Stimmen

Visual Studio Dateien finden, die NICHT X enthalten

Ich brauche eine Möglichkeit, alle Dateien aufzulisten, die NICHT einen bestimmten Text enthalten.

Das Projekt enthält über 1000 Dateien und ich möchte nur diejenigen sehen, die keinen bestimmten Text enthalten.

Ich dachte an reguläre Ausdrücke, aber sie haben eine solche Funktion nicht.

Weiß jemand eine Lösung?

20voto

shannon Punkte 8495

Von einem Befehlszeilenfenster aus:

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

Zum Beispiel:

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

Die Dokumentation von Microsoft zu dieser Methode kann Ihnen dabei helfen, den besten Dateisuchbegriff für Sie zu finden.

4voto

jeroenh Punkte 25392

UPDATE: wie Peter McVoy darauf hingewiesen hat, funktioniert diese Lösung nicht. Es wird false positives zurückgeben (Dateien, die eine Zeile ohne den gesuchten Text enthalten, werden ebenfalls gedruckt). Ein VS-Makro oder ein benutzerdefiniertes Powershell-Skript ist wahrscheinlich der richtige Weg. Ich werde diese Antwort vielleicht später überarbeiten.

Zur Referenz, das war meine Antwort:

Sie können dies auf der Befehlszeile tun:

findstr /S /V /M text_to_search_for *.cs

Dies druckt alle Dateinamen aus, die den Text nicht enthalten

3voto

Devendra D. Chavan Punkte 8535

Sie können die Funktion In Dateien suchen von notepad++ verwenden.

Schritte:

  1. Geben Sie das Wort ein, das Sie finden möchten, und wählen Sie das Verzeichnis aus.
  2. Kopieren Sie das Suchergebnis.
  3. Filtern Sie es, um die Dateiliste zu erhalten, die das Wort enthält.
  4. Führen Sie dann eine einfache Schleife in C# aus, um die Liste der Dateien zu erhalten, die das Wort nicht enthalten.

Hier ist die Schleife, um die Dateiliste zu erhalten (sucht in .cs Dateien) (kann optimiert werden):

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

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

    List notContainedFiles = new List();
    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 Punkte 37887

Verwenden Sie find oder findstr aus einem Befehlsfenster ('DOS-Fenster').

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X