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

File Powershell-修改文件的日期和时间以反映其文件名,file,powershell,timestamp,File,Powershell,Timestamp,我不得不将一堆文件从存储卡恢复到硬盘上。我的硬盘上恢复的文件的名称格式为“yyyymmdd_hhmmss.mp4”,并且确实显示了正确的时间和日期 但是,这些恢复文件的“修改日期”列显示了完全不同的日期(格式为“dd/mm/yyyy hh:mm”(显然是查看其属性时显示的秒数),因为我居住在英国),我希望这些修改日期的戳记再次反映其文件名。我已经开始编写PowerShell脚本来提取变量的日期和时间,到目前为止我已经完成了以下工作: foreach ($file in Get-ChildItem

我不得不将一堆文件从存储卡恢复到硬盘上。我的硬盘上恢复的文件的名称格式为“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的经验,无法编写date modified属性来反映文件名。有人能帮帮我吗

亲切问候,


Rob Hughes。

要更改以更新“修改日期”字段的值称为
。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对象是迄今为止最简单的方法。使用文件名中的好部分,这是对您的一大支持。做得好。

要设置“date modified”属性,请更新
$file.LastWriteTime
属性。可以使用在单个操作中从文件名解析日期和时间

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

非常感谢您的快速回复,马蒂亚斯。我会先在几个测试文件上测试你的代码。Rob.将一把复制到测试目录并在那里运行:-)如果
ParseExact()
调用由于文件名格式不正确而失败,则不会发生任何事情,但是如果指定了错误(但仍然有效)的日期格式(即yyyydmm而不是yyyyymmdd),则会产生错误的结果。非常感谢。你的回答确实让我想了想。罗布。