LCIII Asked: 2021-02-06 11:38:01 +0800 CST2021-02-06 11:38:01 +0800 CST 2021-02-06 11:38:01 +0800 CST 如何使用 PowerShell 获取文件的媒体创建日期 772 使用 PowerShell,如何提取Media Created文件资源管理器中显示的日期属性值? 如果可能的话,我也想对给定目录中的所有文件执行此操作。 powershell 3 个回答 Voted Best Answer Vomit IT - Chunky Mess Style 2021-02-06T16:07:29+08:002021-02-06T16:07:29+08:00 根据PowerShell post 中有关枚举文件属性的指南,我创建了此 PowerShell 逻辑的变体,并将其放入几个脚本中以协助完成任务。 我已经包含了循环逻辑、一些解析和条件逻辑,以及设置可变数据类型以帮助获得最终所需值的逻辑。 注意:我加入了条件逻辑来帮助从输出中省略空值。 电源外壳 设置$flPath为文件的完整路径和文件名。设置$attrName为元数据属性的属性名称以获取其值(例如“Media Created”的日期时间)。 $flPath = "M:\Fortune500\Millionaires Club.mov"; $attrName = "media created" $path = $flPath; $shell = New-Object -COMObject Shell.Application; $folder = Split-Path $path; $file = Split-Path $path -Leaf; $shellfolder = $shell.Namespace($folder); $shellfile = $shellfolder.ParseName($file); $a = 0..500 | % { Process { $x = '{0} = {1}' -f $_, $shellfolder.GetDetailsOf($null, $_); If ( $x.split("=")[1].Trim() ) { $x } } }; [int]$num = $a | % { Process { If ($_ -like "*$attrName*") { $_.Split("=")[0].trim() } } }; $mCreated = $shellfolder.GetDetailsOf($shellfile, $num); $mCreated; 输出示例 12/31/2020 7:55 PM PowerShell(目录中的所有文件) 设置$fldPath为文件所在的目录,设置$flExt为要搜索的文件类型的点扩展名,并设置$attrName为元数据属性的属性名称以获取其值。 $fldPath = "M:\Fortune500"; $flExt = ".mov"; $attrName = "media created" (Get-ChildItem -Path "$fldPath\*" -Include "*$flExt").FullName | % { $path = $_ $shell = New-Object -COMObject Shell.Application; $folder = Split-Path $path; $file = Split-Path $path -Leaf; $shellfolder = $shell.Namespace($folder); $shellfile = $shellfolder.ParseName($file); $a = 0..500 | % { Process { $x = '{0} = {1}' -f $_, $shellfolder.GetDetailsOf($null, $_); If ( $x.split("=")[1].Trim() ) { $x } } }; [int]$num = $a | % { Process { If ($_ -like "*$attrName*") { $_.Split("=")[0].trim() } } }; $mCreated = $shellfolder.GetDetailsOf($shellfile, $num); $mCreated; }; 支持资源 Folder.GetDetailsOf 方法 ForEach-对象 Foreach-Object 的标准别名%:' ' 符号,ForEach 如果() 分裂() 修剪() harrymc 2021-02-06T12:54:03+08:002021-02-06T12:54:03+08:00 这是一些(未经测试的)示例代码: $FilePath = 'C:\Videos\Test.mp4' $Folder = Split-Path -Parent -Path $FilePath $File = Split-Path -Leaf -Path $FilePath $Shell = New-Object -COMObject Shell.Application $ShellFolder = $Shell.NameSpace($Folder) $ShellFile = $ShellFolder.ParseName($File) Write-Host $ShellFile.ExtendedProperty("System.Media.Duration") 参考: ShellFolderItem.ExtendedProperty 方法 预定义的属性集格式标识符 RTang 2022-05-21T02:46:11+08:002022-05-21T02:46:11+08:00 比其他答案更有效,而且更简单。 要获取创建日期,请使用: Write-Host $ShellFile.ExtendedProperty("System.Media.**DateEncoded**") ...而不是System.Media.Duration如示例中所示。
根据PowerShell post 中有关枚举文件属性的指南,我创建了此 PowerShell 逻辑的变体,并将其放入几个脚本中以协助完成任务。
我已经包含了循环逻辑、一些解析和条件逻辑,以及设置可变数据类型以帮助获得最终所需值的逻辑。
电源外壳
设置
$flPath
为文件的完整路径和文件名。设置$attrName
为元数据属性的属性名称以获取其值(例如“Media Created”的日期时间)。输出示例
PowerShell(目录中的所有文件)
设置
$fldPath
为文件所在的目录,设置$flExt
为要搜索的文件类型的点扩展名,并设置$attrName
为元数据属性的属性名称以获取其值。支持资源
这是一些(未经测试的)示例代码:
参考:
ShellFolderItem.ExtendedProperty 方法
预定义的属性集格式标识符
比其他答案更有效,而且更简单。
要获取创建日期,请使用:
...而不是
System.Media.Duration
如示例中所示。