Удалите каталоги с файлами, содержащими определенную строку в PowerShell - PullRequest
0 голосов
/ 16 декабря 2018

Попытка с помощью Windows PowerShell удалить все каталоги, содержащие XML-файл с определенным содержимым.Достигнув списка всех файлов, содержащих правильный шаблон, с помощью

ls -r -Filter *.xml | ?{ $_ | Select-String -Pattern "ACC_cont"}

, но не могу получить пути из вывода и удалить каталог и все его содержимое.Может быть несколько директорий с XML-файлом с правильным шаблоном, и я хотел бы удалить их все.

1 Ответ

0 голосов
/ 16 декабря 2018

Попробуйте следующее:

Get-ChildItem -Recurse -Filter *.xml | 
  Select-String -List -Pattern "ACC_cont" |
    Remove-Item -Recurse -LiteralPath { Split-Path -Parent $_.Path } -WhatIf

-WhatIf предварительный просмотр операции;удалите его, чтобы выполнить фактическое удаление.

  • Select-String непосредственно принимает объекты файловой информации, выводимые Get-ChildItem из конвейера.

    • -List делаетSelect-String остановка после первого совпадения в файле, что повышает эффективность.
  • Объекты match-info, выводимые Select-String, имеют свойство .Path, которое содержитпуть к входному файлу, поэтому Split-Path -Parent $_.Path получает соответствующий путь к директору файла.

  • Передача Split-Path -Parent $_.Path внутри блока скрипта ({ ... }) в Remove-Item параметр -LiteralPathявляется экземпляром блока сценария с задержкой привязки, который предоставляет значения параметров, динамически извлекаемые из каждого входного объекта, так что Remove-Item -Recurse удаляет каждый каталог, в котором был найден соответствующий файл XML.

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