Ik wilde de ‘touch’ functie van het klonen / dupliceren van het bestand data uit een ander bestand, in eigen land, en bruikbaar zijn vanuit een batch-bestand.
Dus ‘drag and drop’ videobestand op batch-bestand, FFMPEG loopt, dan ‘Date Created’ en ‘Date Modified’ uit het invoerbestand wordt gekopieerd naar het uitvoerbestand.
Dit leek in eerste instantie eenvoudig totdat je merkt dat batch bestanden vreselijk slecht omgaan met unicode bestandsnamen, in-line PowerShell verknoeit met bestandsnaamsymbolen, en dubbel ontsnapt is een nachtmerrie.
Mijn oplossing was om het ‘touch’ gedeelte een apart PowerShell script te maken dat ik ‘CLONE-FILE-DATE’ noemde. ps1’ en het bevat:
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
dan is hier voorbeeldgebruik binnen mijn ‘CONVERT.BAT’ batch-bestand:
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
Ik denk dat de PowerShell leesbaar is, dus zal ik het batch-bestand maar uitleggen:
%~dp0 is de huidige directory van het batch-bestand.
%~1 is het pad van het bestand dat op de batch wordt gedropt zonder aanhalingstekens.
CHCP 65001 > nul stelt de karakters in op UTF-8 en slikt de uitvoer.
-ExecutionPolicy ByPass stelt u in staat om PowerShell uit te voeren zonder dat u het globale beleid hoeft aan te passen, dat er is om te voorkomen dat mensen per ongeluk scripts draaien.