Як знайти файли, що містять "рядок A" і НЕ містять "рядок B" і вивести їх імена в файл?


0

Я дивився це інше питання , але не знав, як об'єднати ці запити разом.

Я почав з цього, але, здається, не працює:

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

Наприклад, я хочу отримати список файлів, що містять "рядок A", але НЕ "рядок B".

Я хотів би використовувати командний рядок Windows, якщо це можливо, або Windows PowerShell.


Я знаю, що у вас є pereference для cmd, але PowerShell сидить прямо на вашому комп'ютері з Windows7 і може бути встановлений для попередніх версій теж. З тих пір, як ви висловили це перевагу, хоч я дам це як коментар замість відповіді: ls .\*.vb | Select-String A | Select-Object path -unique | Where-Object{!(Select-String -InputObject $_ -Pattern B)}
EBGreen

@EBGreen Я зміню своє запитання, щоб також дозволити відповіді PowerShell, щоб ви могли розмістити відповідь. Однак я не отримую жодних результатів. Це пошук підпапок?
thecoolmacdude

Відповіді:


1

Це має бути зроблено: \ t

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

Щоб включити підпапки:

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

Я не впевнений, що відрізняє ваш конкретний приклад від моєї макети, але використовуючи ваші конкретні терміни пошуку, спробуйте це:

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

Це, здається, знаходить файли, що містять рядок "A" ok, але також не виключає файли, які містять рядок "B" (якщо вони містять рядок "A").
thecoolmacdude

Так, так що я пригадав тестовий сценарій з 6 файлами. Дві мали А в них, але не Б. Двоє мали В, але у них не було. Що я відправив повернув тільки два з тільки А. Що ви насправді виконуєте?
EBGreen

Я запускаю це з каталогу, який я хочу виконати: Get-ChildItem. *. Vb -Recurse | Виділіть рядок "HttpDelete" | Виділіть шлях до об'єкта - унікальний | Де-об'єкт {! (Select-String -SimpleMatch -InputObject $ _ -Pattern "securityEntityPermission")} Здається, все ще повертає мені файли, які мають безпечність в файлах, коли я не хочу, щоб ці файли були повернуті. Я спробував використати додаток Agent Ransack і зміг отримати правильні файли, тому я не впевнений, чому це не працює.
thecoolmacdude

Перевірте редагування.
EBGreen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.