値を計算して新しい名前で使用することによるファイルの名前のバッチ変更


0

名前を変更する必要があるJPGが数百あります。各ファイル名の既存の番号に適用される次の簡単な式が必要です。

(x-290)*-1

「Vitrine Hinge.0.jpg」は「Vitrine Hinge.290.jpg」に、「Vitrine Hinge.1.jpg」は「Vitrine Hinge.289.jpg」などになります。

問題のファイルの一部

私は次を使用しました:

Dir * .jpg | `foreach {$ data = $ _。name.Split("。 ")Rename-Item -NewName {'(' + $ data 1 + '-290)(-1)'}}

そして、エラーが表示されます。


ファイルの名前をバッチで変更することは、SUでよくある質問です。以前のソリューションについて調査しましたか?コードを使用していて、特定の問題に悩まされていますか?
ルート

@root調査しました。
Lライト

これを単純なバッチ名前変更として使用しました:Dir * .jpg | ForEach-Object -begin {$ count = -146} -process {rename-item $ _ -NewName "VitrineHinge。$ count.jpg"; $ count--}。ただし、ファイルの順序は考慮されず、順序が変更されます。
Lライト

整数が常に最初の後にある場合、.これを使用できますgci . *.jpg | % { $int = $_.Name.Split(".")[1] ; $number = ($int - 290) * -1 ; rni $_.FullName -NewName ($_ -replace $int,$number) }
。– SimonS

代わりに(x-290)*-1、なぜ言うだけではありません290-xか?
Gマン

回答:


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]オブジェクトであるとしましょう。したがって:

$ _。basename

[文字列] "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」に名前が変更されません

何か見逃した場合、私に知らせてください、乾杯:)


0

このような何かが動作するはずです。

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
}

ライアンありがとう。FBの友人が私を助けてくれました:gci * .jpg | foreach {$ data = $ _。name.Split( "。"); $ index =([int] $ data [1] -290)*(-1); rni $ _「Vitrine Hinge。$ index.jpg」}
Lライト

gci *.jpg | foreach { $data = $_.name.Split("."); $index = ([int]$data[1]-290)*(-1); rni $_ " Vitrine Hinge.$index.jpg" }
Lライト
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.