我有一堆.jpg
文件保留在不同的文件夹中,文件名上有一个错误的时间戳(延迟1小时),我想根据创建时间纠正它。这样做的目的是获取一张包含所有已更正文件名及其完整路径的CSV表。
我现在正在尝试编写一个PowerShell脚本,该脚本可以遍历所有文件夹,提取创建时间并使用错误的时间戳将其替换为文件名。下面是一个小例子:
带有错误时间戳的原始文件名:
文件名,创建日期,修改日期
20180524010500530_FR785101.jpg,2018-05-24 00:05:00,2018-05-24 00:05:34
正确的输出是:
文件名,创建日期,修改日期
20180524000500530_FR785101.jpg,2018-05-24 00:05:00,2018-05-24 00:05:34
我已经开始记录自己使用该CreationTime
命令,但我仍然无法弄清楚如何提取创建时间并将其替换为文件名时间戳。另外,我不知道如何让脚本遍历包含图像文件的所有文件夹和子文件夹,最终将所有内容导出到CSV表格中。
Get-ChildItem -Path "c:/path/to/files/" -Recurse -Include @("*.jpg") |
Rename-Item -NewName {
$_.Name -replace "IMG", ($_.CreationTime.ToString("yyyyMMdd"))
}
发布于 2018-08-21 15:25:41
你可能会寻找这样的东西来重命名一个文件,并使用正确的日期/时间。
#Rename file directly to correct format.
Get-ChildItem -Filter '*.jpg' -Recurse | ForEach-Object {
$NewTimestamp = $_.CreationTime.ToString('yyyyMMddHHmmss')
Rename-Item -LiteralPath $_.FullName -NewName ($_.BaseName -replace '.*(_.*)',($NewTimestamp+'$1'+$_.Extension)) -WhatIf
}
这只会将它们导出到桌面上的CSV。
#Export details to CSV
Get-ChildItem -Filter '*.jpg' -Recurse | Select FullName,CreationTime,LastWriteTime | Export-Csv -Path "~\Desktop\Images.csv" -NoTypeInformation
发布于 2018-08-21 16:22:11
以下解决方案:
-NewName
以便计算新文件名,这比使用ForEach-Object
脚本块Rename-Item
在每次迭代中调用的调用更有效(也更简洁)。-PassThru
输出重命名的文件,这使得管道可以Export-Csv
重命名文件并在单个管道中创建CSV文件。Get-ChildItem -Path "c:/path/to/files/" -Recurse *.jpg |
Rename-Item -PassThru -NewName {
'{0}_{1}' -f $_.CreationTime.ToString('yyyyMMddHHmmss'), ($_.Name -split '_')[1]
} |
Select-Object @{ n='path_of_file'; e={ $_.FullName -replace '\\', '_' } },
@{ n='Timestamp'; e={ ($_.BaseName -split '_')[0] } },
@{ n='Name'; e={ ($_.BaseName -split '_')[1] } } |
Export-Csv -NoTypeInformation .\out.csv
https://stackoverflow.com/questions/-100008810
复制相似问题