我有一個檔案夾,里面有按時間戳命名的媒體檔案,如下所示 yyyyMMdd_HHmmss_*.*。我需要將它們重命名為yyyy-MM-dd HH-mm-ss *.*
例如,我需要將檔案20181019_210353_BURST2.jpg重命名為2018-10-19 21-03-53 BURST2.jpg。
有一個我的丑陋的方法
PS E:> gci | Rename-Item -NewName { $_.Name。 Substring(0,4) '-'/span> $_.Name. Substring(4,2) '-' $_. Name.Substring(6,2) ' '/span> $_. Name.Substring(9,2) '-'/span> $_. Name.Substring(11,2) '-' $_. Name.Substring(13,2) $_.Name.Substring(15) }/code>
什么是正確的命令來獲得我的目的?
uj5u.com熱心網友回復:
如果你要找的是精確性,你可以使用-replace運算子,并使用以下重碼:
Get-ChildItem -File -Filter *.jpg | Rename-Item -NewName {
$_.Name -replace '(^d{2})? (d{2})(d{2})(d{2})_', '$1-$3-$4'.
} -WhatIf
注意:上面的命令中的-WhatIf常用引數預視操作。一旦你確定該操作會做你想做的事,就把-WhatIf洗掉。
關于regex的解釋,以及對它和替換運算式的實驗能力,可以在這個regex101.com頁面上找到.
。uj5u.com熱心網友回復:
你的方法將作業,但你需要提供一個-Path引數給Rename-Item。簡而言之,這個字串將需要被分解成用于新名稱的組件。
如果你想玩一些重合運算,你可以使用這樣的方法。當你確信檔案將被正確重命名時,從Rename-Item命令中洗掉-WhatIf。
Get-ChildItem |ForEach-Object {
if ($_.Name -match '^(....)(...)(...)_(...)(.*) ' ) {
$NewName = "$($Matches[1. 3] -join '-') $($Matches[4..6] -join '-')$($Matches[7])"
重命名專案 -路徑 $_.FullName -新名稱 $NewName -WhatIf
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/311997.html
標籤:
