A resposta de Ryan é legal porque funciona sem uma referência ao nome base do novo nome de arquivo.
Estou sempre renomeando arquivos por um motivo ou outro e encontrei maneiras criativas de manipular strings usando o powershell. Aqui está outra maneira de fazer isso:
gci *.jpg | Rename-Item -NewName {$_.basename -replace "$($_.basename.split(".")[-1])$","$(290-$_.basename.split(".")[-1])$($_.extension)"}
Este one-liner pode ser reutilizado para renomear outros arquivos da mesma maneira, sejam eles arquivos jpgs, gifs ou txt. O único requisito é que a última parte do nome da base termine com ". #"
Então, o que está acontecendo aqui? Para dividi-lo, vamos dizer que $ _ é atualmente um objeto [System.IO.FileInfo] para o arquivo "Vitrine Hinge.12.jpg". Portanto:
$_.basename
seria igual a [string] "Vitrine Hinge.12"
$_.basename.split(".")
resultaria em uma matriz com as seguintes entradas:
Door Hinge
12
Como tal, [1] refere-se ao "12". No entanto, observe que eu usei:
$_.basename.split(".")[-1]
Isso porque se eu tivesse um arquivo chamado "Viterine Hinge.Chrome.12.jpg", eu teria feito referência ao "Chrome". Usar [-1] me dará o último item da matriz e, portanto, não importaria se meu arquivo tivesse outros períodos no nome.
OK, agora, neste momento, eu encapsulo isso em $ () e uso no meu operador -replace. Note que eu termino o primeiro argumento com $ para que eu regex combine no final da string. Dessa forma, não importaria se meus arquivos tivessem outros números no nome. Por exemplo, "Viterine D00r Knob.0.jpg" não seria renomeado para "Viterine D290290r Knob.290.jpg"
Deixe-me saber se perdeu alguma coisa, Felicidades:)