ฉันต้องการคุณลักษณะ 'สัมผัส' ในการโคลน / ทำซ้ำวันที่ไฟล์จากไฟล์อื่นโดยกำเนิดและสามารถใช้งานได้จากไฟล์แบตช์
ดังนั้นไฟล์วิดีโอ 'ลากแล้วปล่อย' ไปยังไฟล์แบตช์ FFMPEG จะทำงานจากนั้น 'สร้างวันที่' และ 'แก้ไขวันที่' จากไฟล์อินพุตจะถูกคัดลอกไปยังไฟล์เอาต์พุต
สิ่งนี้ดูเรียบง่ายในตอนแรกจนกระทั่งคุณพบว่าไฟล์แบตช์นั้นแย่มากในการจัดการชื่อไฟล์ยูนิโค้ด PowerShell ในบรรทัดสับสนกับสัญลักษณ์ชื่อไฟล์
โซลูชันของฉันทำให้ส่วน 'touch' เป็นสคริปต์ PowerShell แยกซึ่งฉันเรียกว่า 'CLONE-FILE-DATE.ps1' และประกอบด้วย:
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
จากนั้นนี่คือตัวอย่างการใช้งานภายในไฟล์ชุด '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"
ฉันคิดว่า PowerShell สามารถอ่านได้ดังนั้นจะอธิบายชุดที่พูดได้:
% ~ dp0เป็นไดเรกทอรีปัจจุบันของแบตช์ไฟล์
% ~ 1เป็นเส้นทางของไฟล์ที่ถูกส่งไปยังแบตช์โดยไม่มีเครื่องหมายอัญประกาศ
CHCP 65001> nulตั้งค่าอักขระเป็น UTF-8 และกลืนเอาต์พุต
-ExecutionPolicy ByPassช่วยให้คุณสามารถเรียกใช้ PowerShell โดยไม่จำเป็นต้องแก้ไขนโยบายส่วนกลางซึ่งมีไว้เพื่อป้องกันไม่ให้บุคคลเรียกใช้สคริปต์โดยไม่ตั้งใจ