【问题标题】:Delete DIR recursively if file match? (Powershell)如果文件匹配,递归删除 DIR? (电源外壳)
【发布时间】:2010-11-30 22:29:10
【问题描述】:

我想知道如果目录中有指定的文件,是否有人知道如何删除目录?例如,如果有这个目录:

PS C:\Users\mike> dir


Directory: C:\Users\mike


Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         9/17/2009   6:26 PM       6615 pic001.jpg
-a---         9/19/2009   9:58 AM       7527 notes.txt
-a---         8/31/2009   5:03 PM      10506 Project.xlsx

如果 .\mike 中有一个 jpg 文件,我想删除它,以及任何其他有 .jpg 文件的目录。如果目录没有指定文件,则不应将其删除。

到目前为止,我拥有的是这样的:

get-childitem "C:\Users\mike" -include *.jpg -recurse | Where-Object { $_.mode -like 'd*' } | remove-item

【问题讨论】:

    标签: powershell directory


    【解决方案1】:

    当您将 Get-ChildItem 与 *.jpg 一起使用时,您只会获取文件 - 除非您有一个名为 {something}.jpg 的目录。顺便说一句,我会使用 -filter 并远离 -include 参数。 Thar be dragons - 请参阅有关该参数的文档。

    这应该对你有用:

    Get-ChildItem 'C:\Users\Mike' *.jpg -r | Foreach {$_.Directory} | 
        Remove-Item -Recurse -Verbose -WhatIf
    

    如果键入使用别名将其缩短为:

    gci 'C:\Users\Mike' *.jpg -r | %{$_.Directory} | ri -r -v -wh
    

    当您对结果感到满意时,删除 -WhatIf 以使其真正删除目录。

    【讨论】:

    • 谢谢,这正是我所需要的。也感谢您的提示。
    • 我看到你已经彻底沉迷于 stackoverflow 破解 Keith 了!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 2016-06-28
    • 2015-04-06
    • 2011-01-02
    相关资源
    最近更新 更多