首页 > 解决方案 > 如何在Powershell中删除文件然后删除目录?

问题描述

我试图找到一种方法来处理这样的任务:

有几个目录名称不同。它们包含 2 个文件 hi.exe 和 newScript.bat 我需要编写脚本,在当前目录及其后代中查找包含这两个文件的文件夹,删除它们,然后删除包含目录。

我找到了一种删除这些文件的方法以及如何删除空目录。有没有办法在删除这些文件之前链接目录名称?还是有什么其他方式?

我找到了一种删除文件的方法,但我需要以某种方式保存它们的路径,然后删除一个文件夹: Remove-Item -path H:* -include hi.exe , newScript.bat -recurse -whatif

我也可以删除空文件夹,但这不是我正在寻找的解决方案。

更新:为什么 - 并且它不起作用?但它适用于 -or? PowerShell执行

标签: powershell

解决方案


如果你走这条路,那就是一个开始。

Get-ChildItem -Path C:\ -Recurse | Where-Object {$_.Name -eq "hi.exe" -or $_.Name -eq "newScript.bat" } | foreach { $_.Directory }

您可以删除它们所在的目录,而不是将目录名称发送到控制台。

编辑:

由于我错过了“包含两个文件”,我建议这样做。随意将它写成单行,但我是一步一步做的,所以路上有“检查点”。

$potensial_files = Get-ChildItem -Path C:\ -File -Recurse | Where-Object { @("calc.exe", "cmd.exe").Contains($_.Name) }

$potensial_files.Directory.FullName | select –unique | foreach { 

    $dir = $_
    $files = $potensial_files | Where-Object { $_.Directory.FullName -eq $dir }
    if(($files | Measure-Object).Count -eq 2)
    {
        Write-Host "$dir contains $files"
    }
}

而且我确信这可以写得更短,但是“运行一次”脚本有什么意义呢?


推荐阅读