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 "按任意键退出..."