
答案1
Ryan 的答案很好,因為它無需硬引用新文件名的基本名稱即可工作。
我總是出於某種原因重命名文件,並找到了使用 powershell 操作字串的創意方法。這是另一種方法:
gci *.jpg | Rename-Item -NewName {$_.basename -replace "$($_.basename.split(".")[-1])$","$(290-$_.basename.split(".")[-1])$($_.extension)"}
可以重複使用這一行以相同的方式重命名其他文件,無論它們是 jpg、gif 還是 txt 文件。唯一的要求是基本名稱的最後部分以“.#”結尾
那麼,這是怎麼回事?為了分解它,假設 $_ 目前是檔案「Vitrine Hinge.12.jpg」的 [System.IO.FileInfo] 物件。所以:
$_.基本名稱
等於 [string]“Vitrine Hinge.12”
$_.basename.split(".")
將產生一個包含以下條目的陣列:
Door Hinge
12
因此,[1] 指的是「12」。但是,請注意,我改為使用:
$_.basename.split(".")[-1]
這是因為,如果我有一個名為「Viterine Hinge.Chrome.12.jpg」的文件,我會引用「Chrome」。使用 [-1] 將為我提供數組中的最後一項,因此如果我的檔案名稱中包含其他句點也沒關係。
好的,現在我將其封裝在 $() 中並在我的 -replace 運算子中使用。請注意,我用 $ 結束第一個參數,以便我可以在字串末尾進行正規表示式匹配。這樣,即使我的檔案名稱中包含其他數字也沒關係。例如,「Viterine D00r Knob.0.jpg」將不是重新命名為“Viterine D290290r Knob.290.jpg”
如果錯過了什麼,請告訴我,乾杯:)
答案2
像這樣的東西應該要有效。
Get-ChildItem *.Jpg|%{$SplitName=$_.name -split '\.';$NewNumber= $(([int]$SplitName[1]-290)*-1);$NewName=@($SplitName[0],$NewNumber, $SplitName[2]) -join '.'; Rename-Item $_.name $Newname}
就會被打破。
$Files=Get-ChildItem *.jpg
Foreach ($File in $files){
$SplitName=$File.name -split '\.';
$NewNumber= $(([int]$SplitName[1]-290)*-1)
$NewName=@($SplitName[0],$NewNumber, $SplitName[2]) -join '.'
Rename-Item $_.name $Newname
}