如何使用 Powershell 脚本在 Windows 中查找空目录

Jos*_*hua 12 windows powershell

你用什么命令在 Windows 中查找空目录?

某些文件夹可能包含一些隐藏文件夹,例如.svn.settings,但仍应将它们视为空文件夹。

Win*_*dos 16

我能想到的最简单的方法是使用一个小的PowerShell 脚本。如果您运行的是 Windows 7,您应该已经安装了它,如果没有,请访问 Microsoft.com 下载并安装它。该链接提供了详细说明,但为了您的方便,此处包含了操作的要点。

打开PowerShell并输入:

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ? {$_.GetFiles().Count -eq 0} | select FullName
Run Code Online (Sandbox Code Playgroud)

将 C:\Scripts 更改为您想要搜索的任何内容,如果您希望它检查整个驱动器,您甚至可以将其设置为 C:\。

它会给你这样的输出(注意这些是 C:\Scripts.txt 下的空目录。

全名
------- 
C:\脚本\空 
C:\脚本\空文件夹 2 
C:\Scripts\Empty\Empty 子文件夹 
C:\Scripts\New Folder\Empty 子文件夹三层

如果您稍微研究一下 PowerShell,我相信如果您愿意,您将能够弄清楚如何自动删除空文件夹(尽管我建议不要这样做,以防万一。)

编辑:正如理查德在评论中提到的,对于真正空的目录使用:

(gci C:\Scripts -r | ? {$_.PSIsContainer -eq $True}) | ?{$_.GetFileSystemInfos().Count -eq 0} | select FullName
Run Code Online (Sandbox Code Playgroud)

  • 注意:该管道将查找不包含文件但包含其他文件夹的文件夹。要使文件夹完全为空,请将管道的第三个元素更改为 `?{$_.GetFileSystemInfos().Count -eq 0}`。 (7认同)

小智 5

以下是我能找到的用一行代码实现这一目标的最简单方法。它列出了当前位置的空目录。如果需要递归,可以将参数-Recurse添加到对 的调用中Get-ChildItem

Get-ChildItem -Directory | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }

带别名的简短版本:

dir -Directory | ? {$_.GetFileSystemInfos().Count -eq 0 }

或者,作为参数化的 PowerShell 函数(我将此添加到我的 PowerShell 启动配置文件中):

Function Get-EmptyDirectories($basedir) { 
    Get-ChildItem -Directory $basedir | Where-Object { $_.GetFileSystemInfos().Count -eq 0 }
}
Run Code Online (Sandbox Code Playgroud)

然后可以像任何其他 PowerShell 函数一样调用它,包括管道。例如,此调用将删除系统临时目录中的所有空目录:

Get-EmptyDirectories $env:TMP | del