透過計算值並將其用於新名稱來批量重命名文件

透過計算值並將其用於新名稱來批量重命名文件

我有幾百張 JPG 需要重命名。我需要將以下簡單方程式應用於每個檔案名稱中的現有數字:

(x-290)*-1

“Vitrine Hinge.0.jpg”將變為“Vitrine Hinge.290.jpg”,“Vitrine Hinge.1.jpg”將變為“Vitrine Hinge.289.jpg”,依此類推。

一些有問題的文件

我使用過以下內容:

目錄 *.jpg | ` foreach { $data = $_.name.Split(".") 重新命名項目 -NewName { '(' + $data1+ '-290)(-1)' } }

我收到錯誤。

答案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
}

相關內容