Resposta curta
Assumindo que o diretório de trabalho contenha todos os arquivos para renomear (e somente esses arquivos), aqui está um forro para renomeá-los:
dir . | sort -des | % { if ($_.BaseName % 2 -eq 0 ) { mv $_ $((2 + $_.BaseName).ToString("000000") + $_.Extension) } }
Explicação
-
dir .
lista os arquivos no diretório atual (.
).dir
é um alias para Get-ChildItem . -
sort -des
classifica esses arquivos em ordem decrescente (-des
) de seu nome.sort
é um alias para Sort-Object e-des
é a abreviação de-Descending
. -
%
é um alias para ForEach-Object que executa um script (incluído em chaves ({}
) para cada item no pipeline. -
if ($_.BaseName % 2 -eq 0 )
é usado para verificar se o nome base contém um número par usando o igualdade (-eq
) e módulo (%
) operadores. -
mv
é um alias para Move-Item , que pode ser usado para renomeie um arquivo. -
$_
é o item atual que está em andamento. -
(2 + $_.BaseName)
extrai o nome base e adiciona 2. -
.ToString("000000")
formata este novo número com zeros à esquerda (supondo que você precise de um total de seis dígitos). -
+ $_.Extension
adiciona o arquivo original extensão ($_.Extension
é o extensão do arquivo atual no pipeline e que inclui o.
)
Observação
Esta solução renomearia um arquivo chamado 000998.png
para 001000.png
(em outras palavras, garante que há 6 dígitos no total).