Tôi muốn tính năng 'chạm' của nhân bản / sao chép ngày của tệp từ một tệp khác, nguyên bản và có thể sử dụng được từ một tệp bó.
Vì vậy, 'kéo và thả' tệp video vào tệp bó, FFMPEG chạy, sau đó 'Ngày tạo' và 'Ngày sửa đổi' từ tệp đầu vào được sao chép vào tệp đầu ra.
Điều này ban đầu có vẻ đơn giản cho đến khi bạn thấy các tệp bó rất tệ trong việc xử lý tên tệp unicode, PowerShell trong dòng bị rối với các ký hiệu tên tệp và thoát hai lần là một cơn ác mộng.
Giải pháp của tôi là biến phần 'chạm' thành tập lệnh PowerShell riêng biệt mà tôi gọi là 'CLone-FILE-DATE.ps1' và nó chứa:
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
Sau đây là ví dụ sử dụng trong tệp bó 'CONVERT.BAT' của tôi:
%~dp0\ffmpeg -i "%~1" ACTION "%~1-output.mp4"
CHCP 65001 > nul && PowerShell -ExecutionPolicy ByPass -File "%~dp0\CLONE-FILE-DATE.PS1" "%~1" "%~1-output.mp4"
Tôi nghĩ PowerShell có thể đọc được, vì vậy sẽ chỉ giải thích lô nói:
% ~ dp0 là thư mục hiện tại của tệp bó.
% ~ 1 là đường dẫn của tệp được thả vào lô mà không có dấu ngoặc kép.
CHCP 65001> nul đặt các ký tự thành UTF-8 và nuốt đầu ra.
-ExecutPolicy ByPass cho phép bạn chạy PowerShell mà không cần sửa đổi chính sách toàn cầu, điều này có ở đó để ngăn mọi người vô tình chạy tập lệnh.