[
编辑-由于我建议的修复程序出现了非常奇怪的错误-我无法使用示例数据重现错误-我已将此答案更改为完整的建议代码。
编辑 2 - 添加了新的文件名变体和处理它们的代码。
编辑 3 - 从拆分更改为正则表达式匹配,因为示例数据再次更改。 [*叹息……*]
]
您实际上并没有创建所需的日期时间对象。 $date_from_file= 行实际上除了创建红色错误消息之外没有做任何事情... [grin]
替换这一行...
$date_from_file=GetFileName::[datetime])
...用这一行...
$date_from_file = [datetime]::ParseExact($File.BaseName.Split('_')[-1], $DateFormat, $Null)
... 并且您的 $date_from_file 变量将包含一个正确的 [datetime] 对象,该对象将在您的分配中起作用。
我可能会更改这些分配的顺序以将$file.LastAccessTime = $date_from_file LAST 放在最后,这样它就不会被下一行更改。
此外,该值会在文件被访问时随时更改,因此可能不值得更改。 [咧嘴一笑]
这里是完整的脚本以及它的作用 -
它的作用......
- 设置要使用的位置和日期格式
- 根据 OP 示例文件名创建一组测试文件
- 从源中获取文件
- 将
.BaseName 转换为[datetime] 对象
- 将
.CreationTime、.LastWriteTime和.LastAccessTime值分配给文件名中的日期时间
- 显示更改的值
这里是代码...
$Directory = $env:TEMP
$DateFormat = "yyyy-MM-dd"
# create some test files
$TestFileList = @(
'FileA_2017-10-15.pdf'
'FileB_2016-04-08.pdf'
'FileC_2018-01-30.pdf'
'FileD_2019-09-09_1.pdf'
'FileE_2015-05-05_2.pdf'
)
foreach ($TFL_Item in $TestFileList)
{
$Null = New-Item -Path $Directory -Name $TFL_Item -ItemType File -Force
}
$FileList = Get-ChildItem -LiteralPath $Directory -Filter '*.pdf' -File
foreach ($FL_Item in $FileList) {
# removed split, added regex match to work with ever-growing list of variant file names
$Null = $FL_Item.BaseName -match '_(?<DateString>\d{4}-\d{2}-\d{2})'
$DateString = $Matches.DateString
$date_from_file = [datetime]::ParseExact($DateString, $DateFormat, $Null)
$FL_Item.CreationTime = $date_from_file
$FL_Item.LastWriteTime = $date_from_file
$FL_Item.LastAccessTime = $date_from_file
# show the resulting datetime info
'=' * 20
$CurrentFileInfo = Get-Item -LiteralPath $FL_Item.FullName
$CurrentFileInfo.FullName
$CurrentFileInfo.CreationTime
$CurrentFileInfo.LastWriteTime
$CurrentFileInfo.LastAccessTime
}
屏幕输出...
====================
C:\Temp\FileA_2017-10-15.pdf
2017 October 15, Sunday 12:00:00 AM
2017 October 15, Sunday 12:00:00 AM
2017 October 15, Sunday 12:00:00 AM
====================
C:\Temp\FileB_2016-04-08.pdf
2016 April 08, Friday 12:00:00 AM
2016 April 08, Friday 12:00:00 AM
2016 April 08, Friday 12:00:00 AM
====================
C:\Temp\FileC_2018-01-30.pdf
2018 January 30, Tuesday 12:00:00 AM
2018 January 30, Tuesday 12:00:00 AM
2018 January 30, Tuesday 12:00:00 AM
====================
C:\Temp\FileD_2019-09-09_1.pdf
2019 September 09, Monday 12:00:00 AM
2019 September 09, Monday 12:00:00 AM
2019 September 09, Monday 12:00:00 AM
====================
C:\Temp\FileE_2015-05-05_2.pdf
2015 May 05, Tuesday 12:00:00 AM
2015 May 05, Tuesday 12:00:00 AM
2015 May 05, Tuesday 12:00:00 AM
我直接在资源管理器中检查了文件,它们与显示的值匹配。