Chciałem, aby funkcja dotykowa polegała na klonowaniu / powielaniu dat pliku z innego pliku, natywnie i aby była możliwa do użycia z pliku wsadowego.
Zatem przeciągnij i upuść plik wideo do pliku wsadowego, uruchomi się FFMPEG, a następnie „Data utworzenia” i „Data modyfikacji” z pliku wejściowego zostaną skopiowane do pliku wyjściowego.
Początkowo wydawało się to proste, dopóki nie okaże się, że pliki wsadowe są okropne w obsłudze nazw plików Unicode, wbudowany program PowerShell miesza się z symbolami nazw plików, a podwójne ucieczka jest koszmarem.
Moje rozwiązanie polegało na tym, aby część „dotykowa” była oddzielnym skryptem PowerShell, który nazwałem „CLONE-FILE-DATE.ps1” i zawiera:
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
Oto przykład użycia w moim pliku wsadowym „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"
Myślę, że PowerShell jest czytelny, więc po prostu wyjaśnię mówienie partii:
% ~ dp0 to bieżący katalog pliku wsadowego.
% ~ 1 jest ścieżką pliku upuszczonego na partię bez cudzysłowów.
CHCP 65001> nul ustawia znaki na UTF-8 i połyka dane wyjściowe.
-ExecutionPolicy ByPass umożliwia uruchamianie programu PowerShell bez potrzeby modyfikowania globalnej polityki, która ma zapobiegać przypadkowemu uruchamianiu skryptów.