Я хотел ‘сенсорный’ функция клонирования / копирования даты файла из другого файла, в родном языке, и быть пригодным для использования из пакетного файла.
Так что ‘перетащить’ видео файл на пакетный файл, FFMPEG запускается, а затем ‘Date Created’ и ‘Date Modified’ из входного файла получается скопировать в выходной файл.
Сначала это казалось простым, пока вы не обнаружили, что пакетные файлы ужасно работают с однокодовыми именами файлов, в строке PowerShell путается с символами имен файлов, и двойное экранирование их является кошмаром.
Моим решением было сделать “сенсорную” часть в качестве отдельного PowerShell скрипта, который я назвал ‘CLONE-FILE-DATE’. ps1" и он содержит:
param
(
[Parameter(Mandatory=$true)][string]$SourcePath,
[Parameter(Mandatory=$true)][string]$TargetPath
)
(GI -LiteralPath $TargetPath).CreationTime = (GI -LiteralPath $SourcePath).CreationTime
(GI -LiteralPath $TargetPath).LastWriteTime = (GI -LiteralPath $SourcePath).LastWriteTime
Тогда вот пример использования в моем пакетном файле ‘CONVERT.BAT’:
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
Я думаю, что PowerShell читается, так что просто объясню, как выглядит пакет:
%~dp0 - это текущий каталог пакетного файла.
%~1 это путь к файлу, упавшему на пакет без кавычек.
CHCP 65001 > nul устанавливает символы в UTF-8 и проглатывает вывод.
-ExecutionPolicy ByPass позволяет запускать PowerShell без необходимости изменения глобальной политики, которая существует для предотвращения случайного запуска скриптов.