首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何与文件名比较后用PowerShell脚本更正时间戳?

如何与文件名比较后用PowerShell脚本更正时间戳?
EN

Stack Overflow用户
提问于 2018-08-21 07:20:24
回答 2查看 0关注 0票数 0

我有一堆.jpg文件保留在不同的文件夹中,文件名上有一个错误的时间戳(延迟1小时),我想根据创建时间纠正它。这样做的目的是获取一张包含所有已更正文件名及其完整路径的CSV表。

我现在正在尝试编写一个PowerShell脚本,该脚本可以遍历所有文件夹,提取创建时间并使用错误的时间戳将其替换为文件名。下面是一个小例子:

带有错误时间戳的原始文件名:

代码语言:javascript
复制
文件名,创建日期,修改日期
20180524010500530_FR785101.jpg,2018-05-24 00:05:00,2018-05-24 00:05:34

正确的输出是:

代码语言:javascript
复制
文件名,创建日期,修改日期
20180524000500530_FR785101.jpg,2018-05-24 00:05:00,2018-05-24 00:05:34

我已经开始记录自己使用该CreationTime命令,但我仍然无法弄清楚如何提取创建时间并将其替换为文件名时间戳。另外,我不知道如何让脚本遍历包含图像文件的所有文件夹和子文件夹,最终将所有内容导出到CSV表格中。

代码语言:javascript
复制
Get-ChildItem -Path "c:/path/to/files/" -Recurse -Include @("*.jpg") |
    Rename-Item -NewName {
        $_.Name -replace "IMG", ($_.CreationTime.ToString("yyyyMMdd"))
    }
EN

回答 2

Stack Overflow用户

发布于 2018-08-21 15:25:41

你可能会寻找这样的东西来重命名一个文件,并使用正确的日期/时间。

代码语言:txt
复制
#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。

代码语言:txt
复制
#Export details to CSV
Get-ChildItem -Filter '*.jpg' -Recurse | Select FullName,CreationTime,LastWriteTime | Export-Csv -Path "~\Desktop\Images.csv" -NoTypeInformation
票数 0
EN

Stack Overflow用户

发布于 2018-08-21 16:22:11

以下解决方案:

  • 直接传递脚本块-NewName以便计算新文件名,这比使用ForEach-Object脚本块Rename-Item在每次迭代中调用的调用更有效(也更简洁)。
  • 用于-PassThru输出重命名的文件,这使得管道可以Export-Csv重命名文件并在单个管道中创建CSV文件。
  • 使用计算属性来转换和重命名输出CSV文件的感兴趣属性。
代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档