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.