【问题标题】:Delete directories with files containing specific string in PowerShell在 PowerShell 中删除包含特定字符串的文件的目录
【发布时间】:2018-12-16 12:15:04
【问题描述】:

尝试使用 Windows PowerShell 删除包含具有特定内容的 XML 文件的所有目录。尽可能列出所有包含正确模式的文件

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

但无法从输出中获取路径并删除目录及其所有内容。具有正确模式的 XML 文件的目录可能不止一个,我喜欢将它们全部删除。

【问题讨论】:

  • 不使用Select-String,而是使用Where-Object 之类的过滤器cmdlet - 这将输出文件信息对象而不是匹配对象。然后使用生成的 fileinfo 对象执行其他步骤。

标签: powershell


【解决方案1】:

尝试以下方法:

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 在文件中的第一个匹配后停止,从而提高效率。
  • Select-String 输出的匹配信息对象有一个包含输入文件路径的.Path 属性,因此Split-Path -Parent $_.Path 获得匹配文件的director 路径。

  • 将脚本块 ({ ... }) 内的 Split-Path -Parent $_.Path 传递给 Remove-Item-LiteralPath 参数是延迟绑定脚本块的实例,该脚本块提供从每个输入对象动态派生的参数值,因此Remove-Item -Recurse 删除找到匹配 XML 文件的每个目录。

【讨论】:

  • 我会将其标记为已回答 - 但作为相关问题;有关如何限制仅包含 >3 个月前创建的 XML 文件的任何提示。
  • 谢谢,@DanielDellham - 不用担心投票(一旦你获得 >= 15 分,你就可以做到这一点)。至于您的后续问题:一般来说,请发布一个 new 问题,但在这种情况下,我怀疑现有问题可能有您需要的答案;简而言之:Get-ChildItem -Recurse -Filter *.xml | Where-Object CreationTime -lt (Get-Date).AddMonths(-3)
猜你喜欢
  • 2012-07-02
  • 2018-07-19
  • 2021-10-24
  • 2020-04-02
  • 2020-07-27
  • 2023-01-04
  • 1970-01-01
  • 1970-01-01
  • 2014-04-10
相关资源
最近更新 更多