使用文件名更改 CreationTime

使用文件名更改 CreationTime

我根据一个确切的协议命名我的所有家庭视频文件。例如:8 月 9 日,[电子邮件保护]

通常,原始文件不是 mp4,因此我会进行转换,这会更改“创建日期”属性。虽然我可以进入并单独更改每个文件,但我想使用批处理文件,无论是通过 CMD 提示符还是 powershell,都可以提取文件名中隐含的日期和时间并更改“创建日期”属性。我目前分两步执行此操作。

  1. CMD 脚本在这里https://stackoverflow.com/questions/9946293/b​​atch-set-date-time-attribute-according-to-the-names-of-the-files-in-a-folder似乎只改变了修改日期。
  2. 我使用 PowerShell 将创建日期设置为修改日期。我想摆脱其中一个步骤。非常感谢大家的帮助。

答案1

将此脚本保存为Set-DateCreatedFromName.ps1

Param
(
    [string[]]$Path,
    [string]$Filter = '*.mp4',
    [switch]$Recurse
)

$Path | Get-ChildItem -Recurse:$Recurse -Filter $Filter | ForEach-Object {
    $DateTime = Get-Date
    $IsValidDate = [DateTime]::TryParseExact(
        $_.BaseName,
        # replace with 'MMM dd,[email protected]' if using single digit for hours/minutes/seconds
        'MMM dd,[email protected]',
        [System.Globalization.CultureInfo]::InvariantCulture,
        [System.Globalization.DateTimeStyles]::None,
        [ref]$DateTime
    )
    if($IsValidDate){
        $_.CreationTime = $DateTime
    }
}

像这样从 PowerShell 运行它:

& .\Set-DateCreatedFromName.ps1 -Path 'C:\MP4-1', 'D:\MP4-2' -Recurse -Filter '*.mp4'

参数:

  • -Path- 必填。路径数组。例如:'C:\MP4-1', 'D:\MP4-2'
  • -Recursefalse- 可选。如果省略,则递归到子目录。
  • -Filter-*.mp4如果省略,则为可选。

相关内容