[英]Powershell - modify Date and Time of a file to reflect its filename
我不得不从存储卡中恢复一大堆文件到我的硬盘。 我的硬盘上恢复文件的名称格式为“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的经验不能写日期修改属性来反映文件名。 请有人帮帮我吗?
亲切的问候,
罗伯休斯。
要设置“修改日期”属性,请更新$file.LastWriteTime
属性。 您可以使用[datetime]::ParseExact()
在单个操作中从文件名解析日期和时间。
foreach($file in Get-ChildItem -Filter *.mp4)
{
$file.LastWriteTime = [datetime]::ParseExact($file.BaseName, 'yyyyMMdd_HHmmss', $null)
}
要更改以更新“修改日期”字段的值称为.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的大道具就是从文件名中找出好位,做得好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.