Je voulais la fonctionnalité 'tactile' de clonage / duplication du fichier date d'un autre fichier, de manière native, et utilisable depuis un fichier batch.
Donc, faites glisser le fichier vidéo dans un fichier batch, FFMPEG s'exécute, puis la date de création et la date de modification du fichier d'entrée sont copiées dans le fichier de sortie.
Cela semblait simple au début, jusqu'à ce que vous constatiez que les fichiers de traitement par lots gâchent le traitement des noms de fichiers Unicode, que PowerShell en ligne se mêle aux symboles de nom de fichier et que leur échapper est un cauchemar.
Ma solution a été de faire de la partie tactile un script PowerShell distinct que j’ai appelé "CLONE-FILE-DATE.ps1" et qui contient:
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
Ensuite, voici un exemple d'utilisation dans mon fichier de commandes '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"
Je pense que le PowerShell est lisible, alors expliquons simplement le lot:
% ~ dp0 est le répertoire actuel du fichier de commandes.
% ~ 1 est le chemin du fichier déposé dans le lot sans guillemets.
CHCP 65001> nul définit les caractères sur UTF-8 et avale la sortie.
-ExecutionPolicy ByPass vous permet d'exécuter PowerShell sans avoir à modifier la stratégie globale, qui permet d'éviter que des personnes n'exécutent des scripts par inadvertance.