Powershell:复制文件属性(Creation.Time of * .AVCHD = Creation.Time of encoded * .mp4)

时间:2018-02-22 10:09:33

标签: powershell loops timestamp

美好的一天,

我使用Panasonic摄像机录制视频,并使用HANDBRAKE将* .AVCHD文件压缩为* .mp4文件。出于存档目的,我需要将原始文件时间戳(创建日期和时间)复制到编码的* .mp4文件中。 * .AVCHD文件位于文件夹test2中的文件夹test1和* .mp4文件中。除文件结尾外,文件名相同。

我尝试修改此内容(how to use powershell to copy file and retain original timestamp 解决我的需求但失败了:

$AVCHD = 'test1'
$MP4 = 'test2'

$files = gci $AVCHD | % {$_.Name}

ForEach ($AVCHD_file in $files) {
  $MP4_file.Name = $AVCHD_file.BaseName + ".mp4"  
  $MP4_file.CreationTime = $AVCHD_file.CreationTime
  $MP4_file.LastAccessTime = $AVCHD_file.LastAccessTime
  $MP4_file.LastWriteTime = $AVCHD_file.LastWriteTime
}

Powershell抱怨无法找到文件属性。接下来我要做什么?

感谢您的帮助, 基督教

2 个答案:

答案 0 :(得分:0)

将行$files = gci $AVCHD | % {$_.Name}更改为$files = gci $AVCHD并尝试。

通过将$files声明为$files = gci $AVCHD | % {$_.Name}$files基本上只存储文件夹中文件的名称而不存储任何其他内容。它不包含任何其他属性,因此您无法使用它。

尝试将$files更改为 $files = gci $AVCHD 。现在$files将包含您所需的所有文件属性,您可以根据需要使用它。

答案 1 :(得分:0)

问题是$MP4_file不是对象,因此没有要设置的属性或属性。

获取FileInfo对象的简单方法是使用gci并根据源文件的basename构建合适的路径。像这样,

ForEach ($AVCHD_file in $files) {
    $MP4_file = gci $("$MP4\{0}.mp4" -f $AVCHD_file.basename)
    if (test-path $MP4_file ) {
        # Attribute set goes here
    }
}