Volevo la funzione 'touch' di clonare / duplicare le date dei file da un altro file, nativamente, ed essere utilizzabile da un file batch.
Quindi 'trascina e rilascia' il file video sul file batch, viene eseguito FFMPEG, quindi 'Data di creazione' e 'Data di modifica' dal file di input vengono copiati nel file di output.
Inizialmente è sembrato semplice fino a quando i file batch non sono terribili nella gestione dei nomi di file unicode, in PowerShell in linea si confonde con i simboli dei nomi dei file e la doppia evasione è un incubo.
La mia soluzione era rendere la parte 'touch' uno script PowerShell separato che ho chiamato 'CLONE-FILE-DATE.ps1' e contiene:
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
Quindi ecco un esempio di utilizzo all'interno del mio file 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"
Penso che PowerShell sia leggibile, quindi spiegherò semplicemente il batch parla:
% ~ dp0 è la directory corrente del file batch.
% ~ 1 è il percorso del file rilasciato nel batch senza virgolette.
CHCP 65001> nul imposta i caratteri su UTF-8 e ingoia l'output.
-ExecutionPolicy ByPass consente di eseguire PowerShell senza dover modificare la politica globale, che è lì per impedire alle persone di eseguire accidentalmente script.