我有一堆檔案名,例如:
Belinda Carlisle - Mad About You-Xmdtjwmr9zq.mp4
Air Supply - All Out of Love-Jwdzeumnrmi.mp4
Blue Savannah Song - Erasure-Wxoutwk8jv8.mp4
Breathe - How Can I Fall (1988)-Pwz4erdjzra.mp4
我希望能夠修剪掉隨機字符的后綴。我在制定正則運算式方面得到了一些幫助,我在 PowerShell 中將一個兩行代碼拼湊在一起,它可以作業。唯一需要注意的是,我必須先通過正則運算式過濾,然后再將其傳遞給“rename-item”,否則,它會為檔案名添加兩個擴展名,例如 Belinda Carlisle -Mad About You.mp4.mp4 用于“干凈”的檔案名' - 也就是沒有多余的后綴。
這可以通過另一種方式完成,這樣我就不必通過匹配正則運算式進行過濾并實作相同的目標?不挑剔,只是好奇。
這是我拼湊起來的表達方式。
Get-ChildItem $targetpath -file |
where-object {$_.name -match "-[a-z\d] (?=\.[^.] $)"} |
ForEach-Object {
Rename-Item -Path $_.FullName -NewName ('{0}{1}' -f ($_.Name -replace "-[a-z\d] (?=\.[^.] $).*","$1"), $_.Extension )
}
uj5u.com熱心網友回復:
您的正則運算式可以簡化為此。
Clear-Host
(@'
Belinda Carlisle - Mad About You-Xmdtjwmr9zq.mp4
Air Supply - All Out of Love-Jwdzeumnrmi.mp4
Blue Savannah Song - Erasure-Wxoutwk8jv8.mp4
Breathe - How Can I Fall (1988)-Pwz4erdjzra.mp4
'@) -replace '-[\w]([^.] )'
# Results
<#
Belinda Carlisle - Mad About You.mp4
Air Supply - All Out of Love.mp4
Blue Savannah Song - Erasure.mp4
Breathe - How Can I Fall (1988).mp4
#>
uj5u.com熱心網友回復:
提供 RegEx 的替代解決方案,您可以對BaseName屬性使用字串方法,然后將結果連接到Extension.
Get-ChildItem $targetpath -Filter '*-*-*' -File |
Rename-Item -NewName { $_.BaseName.Substring(0,$_.BaseName.LastIndexOf('-')) $_.Extension }
uj5u.com熱心網友回復:
正如js2010所建議的那樣,您可以通過僅對每個輸入檔案的屬性進行操作來簡化您的任務,在任何潛在的轉換之后使用 ( )
.BaseName重新附加檔案擴展名$_.Extension在您的呼叫中使用延遲系結腳本塊
Rename-Item在概念上更簡單、更有效,它允許直接向其輸入管道。如果給定檔案的名稱恰好已經是“干凈”的,
Rename-Item那么幸運的是,它將是一個安靜的 no-op;也就是說,如果-NewName引數與當前檔案名相同,則不執行任何操作。
Get-ChildItem $targetpath -File |
Rename-Item -NewName { ($_.BaseName -replace '-[a-z\d] $') $_.Extension } -WhatIf
注意:上面命令中的-WhatIf常用引數是預覽操作。-WhatIf 一旦您確定該操作將執行您想要的操作,請洗掉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/522301.html
