Powershell - 修改文件的日期和时间以反映其文件名

时间:2016-08-18 19:11:14

标签: file powershell timestamp

我不得不将一堆文件从存储卡恢复到我的硬盘。我的硬盘上恢复文件的名称格式为" yyyymmdd_hhmmss.mp4",并显示正确的时间和时间。日期。

但是,这些恢复文件的修改日期列显示了完全不同的日期(格式为" dd / mm / yyyy hh:mm"(显然是查看其属性时显示的秒数),因为我居住在英国),我希望这些日期修改的邮票再次反映他们的文件名。我已经开始编写一个PowerShell脚本来提取日期&变量的时间,这是我到目前为止所做的:

foreach ($file in Get-ChildItem *.mp4)
{
    $yy = $file.Name.substring(0,4)
    $mm = $file.Name.substring(4,2)
    $dd = $file.Name.substring(6,2)
    $hh = $file.Name.substring(9,2)
    $min = $file.Name.substring(11,2)
    $ss = $file.Name.substring(13,2)
}

但是,我使用PS的经验无法编写修改日期的属性来反映文件名。请有人帮帮我吗?

亲切的问候,

Rob Hughes。

2 个答案:

答案 0 :(得分:5)

要设置“修改日期”属性,请更新$file.LastWriteTime属性。您可以使用[datetime]::ParseExact()在单个操作中从文件名解析日期和时间。

foreach($file in Get-ChildItem -Filter *.mp4)
{
    $file.LastWriteTime = [datetime]::ParseExact($file.BaseName, 'yyyyMMdd_HHmmss', $null)
}

答案 1 :(得分:2)

要更改的值以更新“修改日期”'字段称为.LastWriteTime。以下是您使用当前代码更改内容的方法。

    foreach ($file in Get-ChildItem *.mp4)
    {
    $yy = $file.Name.substring(0,4)
    $mm = $file.Name.substring(4,2)
    $dd = $file.Name.substring(6,2)
    $hh = $file.Name.substring(9,2)
    $min = $file.Name.substring(11,2)
    $ss = $file.Name.substring(13,2)

   #Create a Date Time object based on the file name
   $date =  get-date -Year $YY -Month $MM -Day $DD -Hour $hh -Minute $min -Second $SS

   #Echo out to screen
   Write-Host "Setting $($file.BaseName) dateModified as $($Date.Date)"
   $file.LastWriteTime = $Date
    }

制作DateTime对象是迄今为止最简单的方法。对你来说OP的大道具就是从文件名中找出好位,做得好。