Ich wollte, dass die 'Touch'-Funktion des Klonens / Duplizierens der Datei ursprünglich aus einer anderen Datei stammt und aus einer Batch-Datei verwendet werden kann.
Ziehen Sie die Videodatei per Drag & Drop in die Batch-Datei, FFMPEG wird ausgeführt, und anschließend werden "Erstellungsdatum" und "Änderungsdatum" aus der Eingabedatei in die Ausgabedatei kopiert.
Dies schien zunächst einfach zu sein, bis Sie feststellen, dass Batch-Dateien schlecht mit Unicode-Dateinamen umgehen können, Inline-PowerShell die Dateinamensymbole durcheinander bringt und doppeltes Escape-Zeichen ein Albtraum ist.
Meine Lösung war, den 'Touch'-Teil zu einem separaten PowerShell-Skript zu machen, das ich' CLONE-FILE-DATE.ps1 'nannte und das Folgendes enthält:
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
Dann ist hier ein Beispiel für die Verwendung in meiner 'CONVERT.BAT'-Batchdatei:
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
Ich denke, dass die PowerShell lesbar ist, also erkläre ich nur die Batch-Sprache:
% ~ dp0 ist das aktuelle Verzeichnis der Batchdatei.
% ~ 1 ist der Pfad der Datei, die ohne Anführungszeichen auf dem Stapel abgelegt wird.
CHCP 65001> nul setzt Zeichen auf UTF-8 und schluckt die Ausgabe.
-ExecutionPolicy ByPass ermöglicht das Ausführen von PowerShell, ohne dass die globale Richtlinie geändert werden muss. Dadurch wird verhindert, dass Benutzer versehentlich Skripts ausführen .