无法获得Folder.GetDetailsOf()以秒为单位返回文件时间

时间:2017-11-27 11:37:44

标签: windows file powershell time

我尝试从iPhone上的文件访问文件创建的时间信息,当它连接到我的Windows笔记本电脑时。我已经将一个成功完成的小型PowerShell测试脚本放在一起,但有一个小缺点:函数Folder.GetDetailsOf(..., 4),它返回文件的创建时间,不包括秒......(示例输出)将是" 18/03/2017 21:58"。)

如何让Folder.GetDetailsOf()返回秒?

我尝试过应用不同的文化(语言环境):

  • 使用所需的时间格式设置新文化;
  • 将所有内容包含在使用文化中,如MSDN blog;
  • 所述
  • 将系统范围的短时间格式(在Windows设置=>时钟,语言和区域中)设置为" HH:mm:ss"。

这些似乎都不起作用......但是,函数Get-Date适用于新文化。这两个函数之间的主要区别在于Folder.GetDetailsOf是通过COM对象(Shell.Application)运行的,而Get-Date则不是。如果使用不同的文化确实是要走的路,那我怎么能将它们应用到COM对象呢?

示例脚本

Function Using-Culture (
    [System.Globalization.CultureInfo]$culture = (throw “USAGE: Using-Culture -Culture culture -Script {scriptblock}”),
    [ScriptBlock]$script= (throw “USAGE: Using-Culture -Culture culture -Script {scriptblock}”)
) {
    $OldCulture = [System.Threading.Thread]::CurrentThread.CurrentCulture
    trap {
        [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
    }
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $culture
    Invoke-Command $script
    [System.Threading.Thread]::CurrentThread.CurrentCulture = $OldCulture
}

$currentThread = [System.Threading.Thread]::CurrentThread
[System.Globalization.CultureInfo] $culture = "nl-NL"
$culture.DateTimeFormat.LongTimePattern = 'HH:mm:ss'
$culture.DateTimeFormat.ShortTimePattern = 'HH:mm:ss'
$culture.DateTimeFormat.FullDateTimePattern = 'dd MMMM, yyyy HH:mm:ss'
$currentThread.CurrentCulture = $culture
$currentThread.CurrentUICulture = $culture

Using-Culture $culture {
    # This outputs the date in Dutch, using the format above;
    # if the format above is changed, then Get-Date's output does too
    Get-Date

    $path = 'C:\Windows\System32\notepad.exe'
    $shell = New-Object -COMObject Shell.Application
    $folder = Split-Path $path
    $file = Split-Path $path -Leaf
    $shellfolder = $shell.Namespace($folder)
    $shellfile = $shellfolder.ParseName($file)

    # GetDetailsOf() on the other hand is oblivious to the newly set culture
    $shellfolder.GetDetailsOf($shellfile, 4)
}

为什么我需要这个?

从我的iPhone上复制视频时,文件在我的笔记本电脑上获得了新的创建时间,因此我失去了原始(实际)时间。修改后的时间会被复制,但并不总是正确的。 (不太清楚为什么,这种情况有时也会发生在拍摄后我不对视频做任何事情的时候。)

为了修复创建时间,我希望从视频中提取创建时间,而仍然在手机上,所以我可以将它们写入文件,稍后再次获取它们。

当然也欢迎任何其他有关如何解决这个问题的建议:)

0 个答案:

没有答案