我根据一个确切的协议命名我的所有家庭视频文件。例如:8 月 9 日,[电子邮件保护]
通常,原始文件不是 mp4,因此我会进行转换,这会更改“创建日期”属性。虽然我可以进入并单独更改每个文件,但我想使用批处理文件,无论是通过 CMD 提示符还是 powershell,都可以提取文件名中隐含的日期和时间并更改“创建日期”属性。我目前分两步执行此操作。
- CMD 脚本在这里https://stackoverflow.com/questions/9946293/batch-set-date-time-attribute-according-to-the-names-of-the-files-in-a-folder似乎只改变了修改日期。
- 我使用 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'
-Recurse
false
- 可选。如果省略,则递归到子目录。-Filter
-*.mp4
如果省略,则为可选。