Как найти файл с несоответствующей строкой, используя select-string в PowerShell? - PullRequest
0 голосов
/ 23 апреля 2020

У меня много файлов. Я хочу найти файл, который не содержит строки. Я пытаюсь это, но он возвращает дубликаты файлов.

$File = Get-ChildItem -Path "D:\*.txt"
$Result = Select-String -Pattern "Identifier -NotMatch $File | Select-Object -ExpandProperty FileName
Write-Host "Result: $Result"

Возвращается вот так

1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 1589.txt 158A.txt 158A.txt 158A.txt 158A.txt 158A.txt 158A.txt AB8A.txt AB8A.txt AB8A.txt AB8A.txt AB8A.txt

Любой может помочь, пожалуйста. Спасибо

1 Ответ

0 голосов
/ 23 апреля 2020

-NotMatch заставит Select-String вернуть строки , которые не совпадают, это не работает на уровне файлов.

Чтобы сделать то, что вы хотите, запустите ALL файлы через Select-String, а затем отфильтровывают те, у которых есть совпадения:

$result = Get-ChildItem -Path D:\ -Filter *.txt |Where-Object {
  @($_ |Select-String -Pattern "Identifier" |Select-Object -First 1).Count -eq 0
} |Select-Object -ExpandProperty FileName

Мы берем первое возможное совпадение из рассматриваемого файла - если ничего не найдено, выражение массива будет пустым и Count -eq 0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...