Windows11计算目录(包括它们所有的子目录)中总体的文件数量和目录数量
问
- Windows11计算包括 \云同步\EXE 和 \云同步\H5
- ①这两个目录(包括它们所有的子目录)中总体的文件数量和目录数量
- ②本身在内的每个目录(以及它们的子目录)中的文件和目录数量,并且分别显示每个目录(包括顶级目录)的统计结果,
- ③先文件、目录、路径这样显示排版要整齐,数字要右对齐,中文显示
答
在Windows 11的PowerShell中,你可以编写一个脚本来计算指定目录(包括它们所有的子目录)中的文件和目录数量,并且按照要求的格式显示结果。以下是一个示例脚本,它实现了你的需求:
- # 定义要统计的顶级目录
- $topDirs = @("\云同步\EXE", "\云同步\H5")
-
- # 定义一个函数来计算文件和目录数量
- function CountFilesAndDirs($dir) {
- $fileCount = (Get-ChildItem -Path $dir -File -Recurse | Measure-Object).Count
- $dirCount = (Get-ChildItem -Path $dir -Directory -Recurse | Measure-Object).Count
- return $fileCount, $dirCount
- }
-
- # 定义一个函数来格式化输出
- function FormatOutput($fileCount, $dirCount, $path) {
- # 设置数字和路径的最大显示宽度
- $maxWidth = 10
-
- # 格式化文件数量和目录数量,右对齐
- $formattedFiles = "{0,$maxWidth}" -f $fileCount
- $formattedDirs = "{0,$maxWidth}" -f $dirCount
-
- # 输出结果
- Write-Host "文件数量:$formattedFiles 目录数量:$formattedDirs 路径:$path"
- }
-
- # 遍历每个顶级目录,并计算统计结果
- foreach ($dir in $topDirs) {
- # 计算顶级目录及其所有子目录中的文件和目录数量
- $fileCountTotal, $dirCountTotal = CountFilesAndDirs $dir
-
- # 显示顶级目录的统计结果
- FormatOutput $fileCountTotal $dirCountTotal $dir
-
- # 递归显示每个子目录(包括顶级目录本身)的统计结果
- Get-ChildItem -Path $dir -Directory -Recurse | ForEach-Object {
- $subdir = $_.FullName
- $fileCount, $dirCount = CountFilesAndDirs $subdir
- FormatOutput $fileCount $dirCount $subdir
- }
- }
-
- # 暂停以便查看结果
- # Read-Host -Prompt "按任意键退出..."
将上述脚本复制并粘贴到PowerShell窗口中,然后按Enter键运行。脚本将执行以下操作:
定义要统计的顶级目录列表。
定义一个函数
CountFilesAndDirs
来计算指定目录及其所有子目录中的文件和目录数量。定义一个函数
FormatOutput
来格式化输出结果,确保数字和路径右对齐,并且中文显示。遍历每个顶级目录,首先计算并显示顶级目录及其所有子目录中的文件和目录总数。
递归地遍历每个子目录(包括顶级目录本身),计算并显示每个子目录中的文件和目录数量。
最后,脚本将暂停,以便你可以查看结果。按任意键退出脚本。
请确保你的PowerShell执行策略允许运行自定义脚本。如果需要,你可以使用Set-ExecutionPolicy
cmdlet来更改执行策略。例如,要允许运行本地脚本,你可以运行Set-ExecutionPolicy RemoteSigned
。
如果你在使用 PowerShell 脚本统计包括 \云同步\EXE
和 \云同步\H5
这两个目录(及其所有子目录)中的文件和目录数量时,发现统计结果不完整,可能是因为某些文件或目录由于权限问题、路径长度限制或其他原因被跳过了。
可分成2次
\云同步\EXE
- # 定义要统计的顶级目录
- $topDirs = @("\云同步\EXE")
-
- # 定义一个函数来计算文件和目录数量
- function CountFilesAndDirs($dir) {
- $fileCount = (Get-ChildItem -Path $dir -File -Recurse | Measure-Object).Count
- $dirCount = (Get-ChildItem -Path $dir -Directory -Recurse | Measure-Object).Count
- return $fileCount, $dirCount
- }
-
- # 定义一个函数来格式化输出
- function FormatOutput($fileCount, $dirCount, $path) {
- # 设置数字和路径的最大显示宽度
- $maxWidth = 10
-
- # 格式化文件数量和目录数量,右对齐
- $formattedFiles = "{0,$maxWidth}" -f $fileCount
- $formattedDirs = "{0,$maxWidth}" -f $dirCount
-
- # 输出结果
- Write-Host "文件数量:$formattedFiles 目录数量:$formattedDirs 路径:$path"
- }
-
- # 遍历每个顶级目录,并计算统计结果
- foreach ($dir in $topDirs) {
- # 计算顶级目录及其所有子目录中的文件和目录数量
- $fileCountTotal, $dirCountTotal = CountFilesAndDirs $dir
-
- # 显示顶级目录的统计结果
- FormatOutput $fileCountTotal $dirCountTotal $dir
-
- # 递归显示每个子目录(包括顶级目录本身)的统计结果
- Get-ChildItem -Path $dir -Directory -Recurse | ForEach-Object {
- $subdir = $_.FullName
- $fileCount, $dirCount = CountFilesAndDirs $subdir
- FormatOutput $fileCount $dirCount $subdir
- }
- }
-
- # 暂停以便查看结果
- # Read-Host -Prompt "按任意键退出..."
\云同步\H5
- # 定义要统计的顶级目录
- $topDirs = @("\云同步\H5")
-
- # 定义一个函数来计算文件和目录数量
- function CountFilesAndDirs($dir) {
- $fileCount = (Get-ChildItem -Path $dir -File -Recurse | Measure-Object).Count
- $dirCount = (Get-ChildItem -Path $dir -Directory -Recurse | Measure-Object).Count
- return $fileCount, $dirCount
- }
-
- # 定义一个函数来格式化输出
- function FormatOutput($fileCount, $dirCount, $path) {
- # 设置数字和路径的最大显示宽度
- $maxWidth = 10
-
- # 格式化文件数量和目录数量,右对齐
- $formattedFiles = "{0,$maxWidth}" -f $fileCount
- $formattedDirs = "{0,$maxWidth}" -f $dirCount
-
- # 输出结果
- Write-Host "文件数量:$formattedFiles 目录数量:$formattedDirs 路径:$path"
- }
-
- # 遍历每个顶级目录,并计算统计结果
- foreach ($dir in $topDirs) {
- # 计算顶级目录及其所有子目录中的文件和目录数量
- $fileCountTotal, $dirCountTotal = CountFilesAndDirs $dir
-
- # 显示顶级目录的统计结果
- FormatOutput $fileCountTotal $dirCountTotal $dir
-
- # 递归显示每个子目录(包括顶级目录本身)的统计结果
- Get-ChildItem -Path $dir -Directory -Recurse | ForEach-Object {
- $subdir = $_.FullName
- $fileCount, $dirCount = CountFilesAndDirs $subdir
- FormatOutput $fileCount $dirCount $subdir
- }
- }
-
- # 暂停以便查看结果
- # Read-Host -Prompt "按任意键退出..."