Saya ingin fitur 'touch' untuk mengkloning / menggandakan tanggal file dari file lain, secara asli, dan dapat digunakan dari file batch.
Jadi 'drag and drop' file video ke file batch, FFMPEG berjalan, kemudian 'Date Created' dan 'Date Modified' dari file input akan disalin ke file output.
Ini tampak sederhana pada awalnya sampai Anda menemukan file batch mengerikan dalam menangani nama file unicode, PowerShell in-line mengacaukan dengan simbol nama file, dan melarikan diri dua kali adalah mimpi buruk.
Solusi saya adalah menjadikan bagian 'touch' sebagai skrip PowerShell terpisah yang saya sebut 'CLONE-FILE-DATE.ps1' dan berisi:
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
Maka di sini adalah contoh penggunaan dalam file batch 'CONVERT.BAT' saya:
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
Saya pikir PowerShell dapat dibaca, jadi hanya akan menjelaskan batch yang berbicara:
% ~ dp0 adalah direktori saat ini dari file batch.
% ~ 1 adalah path file yang jatuh ke batch tanpa tanda kutip.
CHCP 65001> nul mengatur karakter ke UTF-8 dan menelan output.
-ExecutionPolicy ByPass memungkinkan Anda untuk menjalankan PowerShell tanpa perlu mengubah kebijakan global, yang ada untuk mencegah orang-orang secara tidak sengaja menjalankan skrip.