如何在Windows文件资源管理器中为父文件夹的所有子文件夹添加时长列
给Windows文件管理器的子文件夹添加视频总时长列
以下是两种可行的方法,均能实现批量计算子文件夹内所有视频的总时长,并在文件管理器中显示该列:
方法一:用PowerShell结合Shell对象实现(Windows自带工具)
- 打开PowerShell,切换到你的主文件夹路径:
cd "E:\你的主文件夹路径"
- 运行下面的脚本,它会遍历所有子文件夹,计算其中视频的总时长,并把结果写入文件夹的「备注」属性:
$folders = Get-ChildItem -Directory foreach ($folder in $folders) { $totalDuration = [timespan]::Zero # 这里可以添加你需要统计的视频格式 $videos = Get-ChildItem -Path $folder.FullName -Include *.mp4,*.avi,*.mkv,*.mov -Recurse foreach ($video in $videos) { $shell = New-Object -COMObject Shell.Application $folderItem = $shell.Namespace($video.DirectoryName).ParseName($video.Name) # 27是Windows文件管理器中「时长」属性的索引,部分版本可能需调整 $durationStr = $shell.Namespace(0).GetDetailsOf($folderItem, 27) if ($durationStr -match '\d+:\d+:\d+') { $totalDuration += [timespan]::Parse($durationStr) } } # 将总时长写入文件夹的「备注」属性(索引14) $shellFolder = New-Object -COMObject Shell.Application $folderObj = $shellFolder.Namespace($folder.Parent.FullName).ParseName($folder.Name) $shellFolder.Namespace(14).SetDetailsOf($folderObj, $totalDuration.ToString()) }
- 回到文件管理器,右键点击顶部的列标题栏,选择「更多...」,在弹出的列表中找到「备注」并勾选,就能看到每个子文件夹的视频总时长了。
方法二:借助MediaInfo命令行(更精准的时长统计)
如果需要更准确的时长计算(比如处理特殊编码视频),可以用MediaInfo工具:
- 安装MediaInfo客户端(带命令行工具),并将其命令行工具所在路径添加到系统环境变量中。
- 同样在PowerShell中切换到主文件夹,运行脚本:
$folders = Get-ChildItem -Directory foreach ($folder in $folders) { $totalSeconds = 0 Get-ChildItem -Path $folder.FullName -Include *.mp4,*.avi,*.mkv,*.mov -Recurse | ForEach-Object { # 调用MediaInfo获取视频时长(毫秒) $durationMs = mediainfo --Inform="General;%Duration%" $_.FullName if ($durationMs -match '^\d+$') { $totalSeconds += [int]$durationMs / 1000 } } $totalDuration = [timespan]::FromSeconds($totalSeconds) # 写入文件夹备注属性 $shell = New-Object -COMObject Shell.Application $folderObj = $shell.Namespace($folder.Parent.FullName).ParseName($folder.Name) $shell.Namespace(14).SetDetailsOf($folderObj, $totalDuration.ToString()) }
- 重复方法一的第三步,添加「备注」列即可查看结果。
注意事项
- 可以根据自己的视频格式,修改脚本中的
-Include参数,比如添加*.flv,*.wmv等。 - 如果发现时长索引(27)或备注索引(14)不生效,可以自己测试:在文件管理器中选中一个视频,右键「属性」→「详细信息」,记录「时长」的位置,然后用
$shell.Namespace(0).GetDetailsOf($folderItem, 索引)逐个测试找到正确值。 - 脚本运行后按F5刷新文件管理器,即可看到更新后的备注内容。
内容的提问来源于stack exchange,提问作者Mounesh
相关产品推荐
相关产品推荐

