Dosya tarihlerini başka bir dosyadan yerel olarak klonlama / çoğaltma özelliğinin 'dokunma' özelliğini ve bir toplu iş dosyasından kullanılabilir olmasını istedim.
Böylece video dosyasını toplu iş dosyasına 'sürükle ve bırak', FFMPEG çalışır, sonra girdi dosyasından 'Oluşturma Tarihi' ve 'Tarih Değiştirme Tarihi' çıktı dosyasına kopyalanır.
Toplu iş dosyalarının unicode dosya adlarını kullanmada korkunç olduklarını, satır içi PowerShell'in dosya adı sembollerini bozduğunu ve bunlardan çift kaçan bir kabus olduğunu görünene kadar bu ilk bakışta basit göründü.
Benim çözümüm 'dokunma' kısmını 'CLONE-FILE-DATE.ps1' olarak adlandırdığım ayrı bir PowerShell betiği haline getirmekti ve içerdiği:
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
Öyleyse, 'CONVERT.BAT' toplu iş dosyasındaki örnek kullanım şöyle:
%~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'in okunabilir olduğunu düşünüyorum, bu yüzden sadece toplu konuşmayı açıklayacağım:
% ~ dp0 , toplu iş dosyasının geçerli dizinidir.
% ~ 1 , toplu işlem üzerine tırnak içine bırakılan dosyanın yoludur.
CHCP 65001> nul , karakterleri UTF-8 olarak ayarlar ve çıktıyı yutar.
-ExecutionPolicy ByPass , insanların yanlışlıkla komut dosyası çalıştırmalarını önlemek için var olan global politikayı değiştirmeye gerek kalmadan PowerShell'i çalıştırmanıza izin verir.