求编写PowerShell脚本:统计指定时间段内文件夹及子文件夹的文件数
PowerShell脚本:统计指定时间段内创建的文件数量
原脚本问题分析
你的脚本无法运行的核心原因是管道逻辑顺序错误:你先通过Measure-Object统计了所有文件的总数,此时管道中传递的是一个数字(Count值),而Where-Object需要的是文件对象的CreationTime属性,自然无法完成过滤。此外,脚本还缺少目标文件夹指定、自定义起止日期的交互逻辑。
可运行的解决方案脚本
以下是满足需求的完整脚本,支持输入目标文件夹、起止日期,并统计对应时间段内创建的文件数量:
# 获取要统计的文件夹路径,支持默认当前目录 $targetPath = Read-Host "请输入要统计的文件夹路径(直接回车则使用当前目录)" if (-not $targetPath) { $targetPath = $PWD.Path } # 循环获取并验证起始日期 do { $startDateInput = Read-Host "请输入起始日期(格式:yyyy-MM-dd)" $startDate = try { [DateTime]::ParseExact($startDateInput, "yyyy-MM-dd", $null) } catch { $null } if (-not $startDate) { Write-Host "日期格式不正确,请重新输入" } } while (-not $startDate) # 循环获取并验证结束日期,将结束日期设为当天最后一毫秒,确保包含当天所有文件 do { $endDateInput = Read-Host "请输入结束日期(格式:yyyy-MM-dd)" $endDate = try { [DateTime]::ParseExact($endDateInput, "yyyy-MM-dd", $null).AddDays(1).AddMilliseconds(-1) } catch { $null } if (-not $endDate) { Write-Host "日期格式不正确,请重新输入" } } while (-not $endDate) # 统计符合条件的文件数量:先过滤再计数,逻辑正确 $fileCount = (Get-ChildItem -Path $targetPath -Recurse -File | Where-Object { $_.CreationTime -ge $startDate -and $_.CreationTime -le $endDate }).Count # 输出结果 Write-Host "`n在 [$targetPath] 及其子文件夹中,[$startDateInput] 至 [$endDateInput] 期间创建的文件总数为:$fileCount"
脚本关键点说明
- 文件夹路径灵活性:支持手动输入路径,也可直接回车使用当前工作目录。
- 日期输入验证:通过循环确保用户输入的日期格式符合要求,避免脚本因无效输入崩溃。
- 结束日期处理:将结束日期调整为当天的最后一毫秒(如
2024-05-20 23:59:59.999),确保当天创建的所有文件都被纳入统计。 - 精准过滤:使用
-File参数仅统计文件(若需包含文件夹,可移除该参数),先通过Where-Object过滤符合时间范围的文件,再统计数量,逻辑正确。
内容的提问来源于stack exchange,提问作者pbitps
相关产品推荐
相关产品推荐

