別のファイルからファイルの日付をネイティブに複製/複製し、バッチファイルから使用できる「タッチ」機能が必要でした。
したがって、ビデオファイルをバッチファイルに「ドラッグアンドドロップ」すると、FFMPEGが実行され、入力ファイルの「作成日」および「変更日」が出力ファイルにコピーされます。
これは、Unicodeファイル名の処理がバッチファイルでひどく、PowerShellがインラインでファイル名シンボルを台無しにし、それらをダブルエスケープするのが悪夢であることがわかるまで、最初は簡単に思えました。
私の解決策は、「タッチ」部分を「CLONE-FILE-DATE.ps1」と呼ぶ別のPowerShellスクリプトにすることでした。
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を実行できます。これにより、ユーザーが誤ってスクリプトを実行するのを防ぐことができます。