如何使用 PowerShell 获取文件的媒体创建日期

如何使用 PowerShell 获取文件的媒体创建日期

使用 PowerShell,如何提取Media Created文件资源管理器中此处显示的日期属性值?

在此处输入图片描述

如果可能的话,我也想对给定目录中的所有文件执行此操作。

答案1

根据在 PowerShell 中枚举文件属性帖子中,我创建了这个 PowerShell 逻辑的变体,并将其放入几个脚本中以协助完成任务。

我已经包含了循环逻辑、一些解析和条件逻辑,以及设置变量数据类型以协助获得最终的期望值。

笔记:我加入了条件逻辑来帮助从输出中省略空值。

电源外壳

设置$flPath为文件的完整路径和文件名。设置$attrName为元数据属性的属性名称以获取其值(例如“媒体创建”的日期时间)。

$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;
};

支持资源

答案2

以下是一些(未经测试的)示例代码:

$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")

参考:

答案3

效果很好,而且比其他答案简单得多。

要获取创建日期,请使用:

Write-Host $ShellFile.ExtendedProperty("System.Media.**DateEncoded**")

...而不是System.Media.Duration像例子中所示的那样。

相关内容