Come posso trovare file contenenti "stringa A" e NON contenenti "stringa B" e generare i loro nomi in un file?


0

Stavo guardando questa altra domanda , ma non ero sicuro di come combinare queste domande insieme.

Ho iniziato con questo, ma non sembra funzionare:

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

Ad esempio, voglio ottenere un elenco di file contenenti "stringa A" ma NON "stringa B".

Vorrei utilizzare la riga di comando di Windows se possibile o Windows PowerShell.


So che hai una pereferenza per cmd, ma PowerShell è proprio lì sul tuo computer da Windows 7 in poi e può essere installato anche per versioni precedenti. Dato che hai espresso questa preferenza, anche se darò questo come commento anziché come risposta:ls .\*.vb | Select-String A | Select-Object path -unique | Where-Object{!(Select-String -InputObject $_ -Pattern B)}
— EBGreen

@EBGreen Cambierò la mia domanda per consentire anche le risposte di PowerShell in modo che tu possa pubblicare come risposta. Non sto ottenendo alcun risultato, comunque. Questa ricerca nelle sottocartelle?
— thecoolmacdude,

Risposte:


1

Questo dovrebbe farlo in PowerShell:

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

Per includere sottocartelle:

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

Non sono sicuro di ciò che rende il tuo esempio specifico diverso dal mio mock up, ma usando i tuoi termini di ricerca specifici prova questo:

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

Questo sembra trovare i file contenenti la stringa "A" ok, ma non esclude anche i file che contengono la stringa "B" (se contengono la stringa "A").
— thecoolmacdude,

Sì, quindi ho inventato uno scenario di prova con 6 file. Due avevano A in loro, ma non B. Due avevano B in loro ma nessun A. Due avevano A e B in loro. Quello che ho pubblicato ha restituito solo i due con solo A. Cosa stai effettivamente eseguendo?
— EBGreen

Sto eseguendo questo dalla directory in cui voglio eseguirlo: Get-ChildItem. *. Vb -Recurse | Select-String "HttpDelete" | Select-Object path -unique | Where- Object {! (Select-String -SimpleMatch -InputObject $ _ -Pattern "securityEntityPermission")} Sembra ancora che mi stia restituendo file che hanno securityEntityPermission nei file stessi quando non voglio che questi file vengano restituiti. Ho provato a utilizzare l'applicazione Agent Ransack e sono riuscito a ottenere i file corretti, quindi non sono sicuro del motivo per cui non funziona.
— thecoolmacdude,

Controlla la modifica.
— EBGreen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.