Je voulais que la fonction “tactile” de clonage / duplication des dates de fichier à partir d'un autre fichier, en mode natif, et qu'elle soit utilisable à partir d'un fichier par lots.
Donc, “glisser-déposer” du fichier vidéo sur le fichier par lots, FFMPEG s'exécute, puis “Date de création” et “Date de modification” du fichier d'entrée est copié sur le fichier de sortie. Cela semblait simple au début, jusqu'à ce que vous découvriez que les fichiers batch sont très mauvais pour gérer les noms de fichiers unicode, que PowerShell en ligne se trompe avec les symboles de noms de fichiers et que leur double évasion est un cauchemar. Ma solution a été de faire de la partie “touch” un script PowerShell séparé que j'ai appelé “CLONE-FILE-DATE”. ps1’ et il 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
Puis voici un exemple d'utilisation dans mon fichier batch ‘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, donc je vais juste expliquer le langage batch :
%~dp0 est le répertoire courant du fichier batch.
%~1 est le chemin du fichier déposé sur le lot sans les guillemets.
CHCP 65001 > nul met les caractères en UTF-8 et avale la sortie.
-ExecutionPolicy ByPass vous permet d'exécuter PowerShell sans avoir besoin de modifier la politique globale, qui est là pour empêcher les gens d'exécuter accidentellement des scripts.