PowerShell中‘Media created’对应变量是什么?用于批量重命名MOV文件
批量重命名MOV文件为媒体创建时间(避免重复)
要获取MOV文件的「Media Created」元数据,PowerShell的FileInfo对象没有直接对应的属性,需要通过Windows Shell对象读取该媒体属性。以下是修改后的代码,同时解决了重复命名的问题:
# 获取当前目录下的所有MOV文件,按媒体创建时间排序 $files = Get-ChildItem -Filter *.mov | Sort-Object { $shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace($_.DirectoryName) $file = $folder.ParseName($_.Name) # 提取Media Created属性(Windows Shell属性ID固定为12) [DateTime]$folder.GetDetailsOf($file, 12) } # 按媒体创建时间分组,处理重复命名 $files | Group-Object { $shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace($_.DirectoryName) $file = $folder.ParseName($_.Name) [DateTime]$folder.GetDetailsOf($file, 12) } | ForEach-Object { $index = 1 $group = $_ $group.Group | ForEach-Object { $mediaCreated = [DateTime]$group.Name # 格式化时间,重复文件添加序号后缀 $newName = if ($group.Count -eq 1) { $mediaCreated.ToString("yyyy-MM-dd hh.mm.ss ddd") + $_.Extension } else { $mediaCreated.ToString("yyyy-MM-dd hh.mm.ss ddd") + " ($index)" + $_.Extension } Rename-Item -Path $_.FullName -NewName $newName -WhatIf $index++ } }
代码说明:
- 读取媒体创建时间:通过
Shell.Application的GetDetailsOf方法,属性ID12对应Windows系统中的「Media Created」属性。 - 排序与分组:先按媒体创建时间对文件排序,再将同一时间的文件分组,从根源避免重命名冲突。
- 重复处理逻辑:同一时间点的文件会自动添加
(1)、(2)这类序号后缀。 - -WhatIf参数:默认仅预览重命名操作,确认逻辑无误后删除该参数即可执行实际重命名。
额外验证(可选):
若不确定系统中属性ID12是否对应「Media Created」,可运行以下代码查询所有Shell属性的ID与名称对应关系:
$shell = New-Object -ComObject Shell.Application $folder = $shell.Namespace("你的目标文件目录路径") for ($i = 0; $i -lt 200; $i++) { Write-Host "$i : $($folder.GetDetailsOf($folder.Items, $i))" }
内容的提问来源于stack exchange,提问作者sikorloa
相关产品推荐
相关产品推荐

