soa*_*dos 5 powershell powershell-2.0
我在其他问题中已经看到了这些,但我正在寻找一种通用的方法来编写一个将获取文件的函数,并以可以使用它们的方式列出其属性.我知道调用的函数,Get-ItemProperty但它没有列出我正在寻找的属性(例如,给定.avi文件,它不会告诉我长度,帧宽等).
我使用的功能是错误的(我正在做的是:) Get-ItemProperty file或者我必须以不同的方式做这个吗?
我希望能够说出$ a + = $ file.Length之类的东西,或类似于任意属性的东西.
And*_*ndi 13
听起来你正在寻找扩展文件属性.这些不存储在System.IO.FileInfo.
一种方法是使用Shell.ApplicationCOM对象.这是一些示例代码:
假设你有一个视频文件:C:\ video.wmv
$path = 'C:\video.wmv'
$shell = New-Object -COMObject Shell.Application
$folder = Split-Path $path
$file = Split-Path $path -Leaf
$shellfolder = $shell.Namespace($folder)
$shellfile = $shellfolder.ParseName($file)
Run Code Online (Sandbox Code Playgroud)
您需要知道扩展属性的ID是什么.这将显示所有ID:
0..287 | Foreach-Object { '{0} = {1}' -f $_, $shellfolder.GetDetailsOf($null, $_) }
Run Code Online (Sandbox Code Playgroud)
一旦找到了你想要的那个就可以像这样访问它:
$shellfolder.GetDetailsOf($shellfile, 216)
Run Code Online (Sandbox Code Playgroud)
小智 6
另一种可能的方法也使用 Shell.Application COM 对象,但不需要您知道扩展属性的 ID\xe2\x80\x99s 是什么。此方法优于使用 ID\xe2\x80\x99s,因为 ID\xe2\x80\x99s 在不同版本的 Window(XP、Vista、10 等)中是不同的。
\n$FilePath = \'C:\\Videos\\Test.mp4\'\n$Folder = Split-Path -Parent -Path $FilePath\n$File = Split-Path -Leaf -Path $FilePath\n$Shell = New-Object -COMObject Shell.Application\n$ShellFolder = $Shell.NameSpace($Folder)\n$ShellFile = $ShellFolder.ParseName($File)\n\nWrite-Host $ShellFile.ExtendedProperty("System.Title")\nWrite-Host $ShellFile.ExtendedProperty("System.Media.Duration")\nWrite-Host $ShellFile.ExtendedProperty("System.Video.FrameWidth")\nWrite-Host $ShellFile.ExtendedProperty("System.Video.FrameHeight")\nRun Code Online (Sandbox Code Playgroud)\n该代码将显示视频的标题(如果已设置)、持续时间(100ns 单位,而不是毫秒)以及视频帧的宽度和高度。
\n其他扩展属性的名称可以在文件propkey.h中找到,该文件是 Windows SDK 的一部分。
\n附加信息:
\nShellFolderItem.ExtendedProperty 方法
\n\n| 归档时间: |
|
| 查看次数: |
18736 次 |
| 最近记录: |