Wie finde ich Dateien, die "Zeichenfolge A" enthalten und NICHT "Zeichenfolge B" enthalten, und geben deren Namen in eine Datei aus?

951
thecoolmacdude

Ich habe mir diese andere Frage angesehen, war mir aber nicht sicher, wie man diese Fragen zusammenfasst.

Ich habe damit angefangen, aber es scheint nicht zu funktionieren:

findstr /S /M "string A" *.vb | findstr /S /M /V "string B" > output.txt 

Ich möchte zum Beispiel eine Liste mit Dateien erhalten, die "Zeichenfolge A" enthalten, aber NICHT "Zeichenfolge B".

Ich möchte, falls möglich, die Windows-Befehlszeile oder Windows PowerShell verwenden.

0
Ich weiß, dass Sie für cmd eine Berechtigung haben, aber Powershell sitzt ab Windows7 direkt auf Ihrem Computer und kann auch für frühere Versionen installiert werden. Da Sie diese Vorliebe zwar ausgedrückt haben, werde ich dies als Kommentar anstelle einer Antwort angeben: `ls. \ *. Vb | Auswahlzeichenfolge A | Select-Object path -unique | Where-Object {! (Select-String -InputObject $ _ -Pattern B)} ` EBGreen vor 6 Jahren 0
@EBGreen Ich werde meine Frage ändern, um auch PowerShell-Antworten zuzulassen, damit Sie als Antwort posten können. Ich bekomme jedoch keine Ergebnisse. Sucht diese Unterordner? thecoolmacdude vor 6 Jahren 0

1 Antwort auf die Frage

1
EBGreen

Dies sollte es in Powershell tun:

Get-ChildItem .\*.vb | Select-String A | Select-Object path -unique | Where-Object{!(Select-String -InputObject $_ -Pattern B)} 

Um Unterordner einzuschließen:

Get-ChildItem .\*.vb -Recurse | Select-String A | Select-Object path -unique | Where-Object{!(Select-String -InputObject $_ -Pattern B)} 

Ich bin nicht sicher, was Ihr spezifisches Beispiel von meinem Mockup unterscheidet, aber versuchen Sie es mit Ihren spezifischen Suchbegriffen:

Get-ChildItem .\*.vb -Recurse | Select-String HttpDelete | Select-Object path -unique | Where-Object{!(Select-String -InputObject (Get-Content $_.Path) -Pattern securityEntityPermission)} 
Dies scheint Dateien zu finden, die die Zeichenfolge "A" enthalten, ok, schließt jedoch auch Dateien aus, die die Zeichenfolge "B" enthalten (wenn sie die Zeichenfolge "A" enthalten). thecoolmacdude vor 6 Jahren 0
Ja, ich habe ein Testszenario mit 6 Dateien überspielt. Zwei hatten A, aber kein B. Zwei hatten B, aber kein A. Zwei hatten A und B. Was ich gepostet habe, brachte nur die beiden mit nur A. Was führen Sie tatsächlich aus? EBGreen vor 6 Jahren 0
Ich führe dies von dem Verzeichnis aus, in dem ich es ausführen möchte: Get-ChildItem. \ *. Vb -Recurse | Auswahlzeichenfolge "HttpDelete" | Select-Object path -unique | Where-Object {! (Select-String -SimpleMatch -InputObject $ _ -Pattern "securityEntityPermission")} Es werden immer noch Dateien mit SecurityEntityPermission in den Dateien selbst zurückgegeben, wenn diese Dateien nicht zurückgegeben werden sollen. Ich habe versucht, die Anwendung Agent Ransack zu verwenden, und konnte die korrekten Dateien abrufen. Ich bin mir nicht sicher, warum dies nicht funktioniert. thecoolmacdude vor 6 Jahren 0
Überprüfen Sie die Bearbeitung. EBGreen vor 6 Jahren 0
Ja das war es! Vielen Dank! thecoolmacdude vor 6 Jahren 0