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





