2

Может ли кто-нибудь помочь мне правильно понять эту линию?

powershell Set-ItemProperty -LiteralPath '[NewVideo]' -Name CreationTimeUtc -Value ('[CreationTimeOfOldVideo]' -as [Datetime])

Я пытаюсь повернуть видеофайлы на 90 градусов, сохранив дату создания исходного файла. Я нашел способ сделать вращение с помощью ffmpeg, но я застрял, пытаясь скопировать дату создания в новый файл. Поиск заставил меня сделать вывод, что это возможно с помощью PowerShell (о котором я почти ничего не знаю)

Это то, что я до сих пор:

FOR /r %%I in (*.avi, *.mp4) DO CALL :loopbody "%%~fI" "%%~dpnI_%%~xI" "%%~tI"
GOTO :EOF
:loopbody
ffmpeg -i %1 -c:v libx264 -crf 18 -maxrate 4000k -bufsize 4000k -c:a libvo_aacenc -q:a 100 -map_metadata 0 -preset veryslow -tune film -movflags +faststart %2
powershell Set-ItemProperty -LiteralPath '%2' -Name CreationTimeUtc -Value ('%3' -as [Datetime])

К счастью, был скопирован с другого пользователя на этом форуме. Проблема заключается в последней строке. Переменная% 3 - это дата cmd ($ ~ tI) старого файла, обычно это LastModifiedDate, а не CreationDate. Мне нужна PowerShell, чтобы установить дату создания нового файла так же, как дату создания старого файла. Я провел некоторые эксперименты с [oldfile].CreationTimeUTC, безрезультатно.

Помощь очень ценится.

1 ответ1

2

Пример команды Powershell для получения даты создания файла:

(Get-ChildItem c:\path\yourFile.txt).CreationTime

Пример команды Powershell для установки даты создания файла:

(Get-ChildItem c:\path\yourFile.txt).CreationTime = '01/01/1900 12:42AM'

Поэтому в качестве однострочника, который будет использоваться в существующем скрипте «как есть» (вместо последней строки), попробуйте что-то вроде:

powershell (Get-ChildItem '%2').CreationTime = (Get-ChildItem '%1').CreationTime

Это установит время создания нового файла (% 2) равным времени создания старого файла (% 1).

Предполагается, что %2 содержит путь / имя нового файла, а %1 содержит путь / имя старого файла. :)

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