script de renomeação de arquivo (move parte do nome do arquivo)

0

Eu tenho nomes de arquivos contendo 2 - 's.

  • Antes do primeiro, o texto é sempre o mesmo ( daughter of moon ).

  • Após o primeiro - (seguido por um espaço em branco e antes do - , também é um espaço em branco), geralmente é um número (mas também pode ser algum texto).

  • Após o segundo - similar.

Eu quero dividir meu nome de arquivo em 3. part1 - part2 - part3.jpg .

Eu gostaria de ter um script que mova part3 para part2 (= troque as partes).

Mais tarde, quero poder alterar alguns part2 e part1 .

Eu tentei coisas como

get-childItem 'daugther of moon - * - 2*.jpg' | rename-item -newname ' { $_.name -replace ($x.split('moon -')[0], $x.split(' - ^ - ')[1], $x.split('- 2')[2], $x.split('.')[3] -join)} 

mas isso parece não funcionar.

O que estou fazendo de errado?

    
por Bruno 30.06.2017 / 14:02

3 respostas

0

O script a seguir usa um RegEx para criar grupos () dos elementos divididos pelo - e reorganiza-os para criar o novo nome

# Change path to fit your environment
Pushd "A:\"
Get-ChildItem 'daugther of moon - * - *.jpg' |
  Where BaseName -match '(daugther of moon) - (.*) - (.*)'|
    Rename-Item -NewName {$matches[1]+' - '+'
                          $matches[3]+' - '+'
                          $matches[2]+$_.Extension} -Confirm
PopD

Como Renomear-Item aceita entrada canalizada, o bloco de script {} monta os elementos na nova ordem.

Exemplo de saída no meu A:\ ramdrive

Confirm
Are you sure you want to perform this action?
Performing the operation "Rename File" on target 
      "Item: A:\daugther of moon - one - two.jpg 
Destination: A:\daugther of moon - two - one.jpg".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):
    
por 30.06.2017 / 17:57
0

O Bulk Rename Utility ( link , Freeware) pode fazer o que você está procurando e muito mais, embora eu Sei que isso não está respondendo a sua pergunta sobre o que você está fazendo errado no PowerShell ... (eu usaria sua funcionalidade RegEx para atingir seu objetivo)

    
por 30.06.2017 / 14:17
0

Ao fazer operações mais complicadas, é mais fácil de seguir se você dividi-lo.

$files = Get-ChildItem 'daugther of moon - * - 2*.jpg'

$files | ForEach-Object {
    $parts = $_.BaseName.Split("-")
    $partOne = $parts[0].Trim()
    $partTwo = $parts[1].Trim()
    $partThree = $parts[2].Trim()

    Rename-Item $_ -NewName "$partOne - $partThree - $partTwo$($_.Extension)"
}
    
por 30.06.2017 / 17:36