Я называю все мои домашние видеофайлы в соответствии с точным протоколом. Пример: Авг 09,2005 @ 13.21.12.mp4

Как правило, исходный файл не является mp4, поэтому я прохожу процесс конвертации, который изменяет свойство Date Created. Хотя я могу войти и изменить каждый из них по отдельности, я хотел бы использовать командный файл, либо через приглашение CMD, либо powershell, который извлекает дату и время, указанные в имени файла, и изменяет свойство Date Created. В настоящее время я делаю это в два этапа.

  1. Скрипт CMD здесь https://stackoverflow.com/questions/9946293/batch-set-date-time-attribute-according-to-the-names-of-the-files-in-a-folder, кажется, только меняет Дата изменена.
  2. Я использую PowerShell, чтобы установить Дата создания = Дата изменения. Я хотел бы избавиться от одного из этих шагов. Вся помощь высоко ценится.

1 ответ1

0

Сохраните этот скрипт как 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,yyyy@H.m.s' if using single digit for hours/minutes/seconds
        'MMM dd,yyyy@HH.mm.ss',
        [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 - необязательно. Записать в subdirs, false если опущено.
  • -Filter - необязательно, *.mp4 если не указано .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .