Não é possível substituir o espaço por caracteres na atualização do nome em massa

1

Eu tenho algumas imagens em uma pasta como

van-map-PE 100-1.png
van-map-PE 200-8.png
van-map-PE 160-2.png
van-map-PE 400-6.png

Agora quero remover todos os espaços entre PE xxx- e substituí-los por - like

van-map-PE-100-1.png
van-map-PE-200-8.png
van-map-PE-160-2.png
van-map-PE-400-6.png

Eu usei este comando no Power shell

PS D:\imgs\png> get-childitem *.png | foreach { rename-item $_ $_.name.replace( "PE ","PE-")}

mas estou recebendo este erro

ForEach-Object : Cannot bind parameter 'RemainingScripts'. Cannot convert the "" value of type "System.String" to type "System.Management.Automation.ScriptBlock".
At line:1 char:78
+ ... item *.png | foreach { rename-item $_ $_.name.replace( "PE ","PE-")}
+                                                                         ~
    + CategoryInfo          : InvalidArgument: (:) [ForEach-Object], ParameterBindingException
    + FullyQualifiedErrorId : CannotConvertArgumentNoMessage,Microsoft.PowerShell.Commands.ForEachObjectCommand
    
por Mona Coder 28.09.2018 / 23:42

2 respostas

2

Sua sintaxe está correta. O problema é um personagem indesejado escondido no final da sua declaração. Observe como o ~ no erro está sublinhando o que parece ser o vazio após o seu código. Você tem uma Marca de pedido de bytes (BOM) indesejada depois da chave final. Observar seu código em um editor hexadecimal revela isso:

Resolução

Apartirdofinaldoseucódigo,pressionebackspaceatéachavedefechamentodesaparecer.Issogarantiráquevocêremoveualistademateriais.Depoisqueachavedefechamentoforremovida,adicione-anovamente.Emalternativa,copieestaversãorevistadasuadeclaração:

gci*.png|%{ren$_$_.name.replace(" ","-")}

Informações adicionais

EF BB BF (  ) é a BOM de UTF-8. Este problema está presente apenas no seu post original. Como sua postagem foi editada, não vejo o caractere da lista de materiais em seu código do Powershell (embora eu não veja que ele tenha sido explicitamente removido por meio de uma edição). Se você fosse revisar o histórico de sua postagem original, poderá capturar a BOM indesejada.

    
por 29.09.2018 / 03:32
0

Aqui está uma tomada que deve fazer isso para você. Outros, claro, terão sua opinião.

'van-map-PE 100-1.png',
'van-map-PE 200-8.png',
'van-map-PE 160-2.png',
'van-map-PE 400-6.png' | 
%{New-Item -Path 'D:\Temp\PngFiles' -Name "$_" -ItemType File}

Get-ChildItem -Path 'D:\Temp\PngFiles'


    Directory: D:\Temp\PngFiles


Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE 100-1.png                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE 160-2.png                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE 200-8.png                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE 400-6.png  


Get-ChildItem -Path 'D:\Temp\PngFiles' | 
ForEach { 
    $NewFileName = $_.FullName -replace ' ','-'
    Rename-Item -Path $_.FullName -NewName $NewFileName -Verbose -WhatIf
}


 Get-ChildItem -Path 'D:\Temp\PngFiles' | 
ForEach { 
    $NewFileName = $_.FullName -replace ' ','-'
    Rename-Item -Path $_.FullName -NewName $NewFileName -Verbose -WhatIf
}
What if: Performing the operation "Rename File" on target "Item: D:\Temp\PngFiles\van-map-PE 100-1.png Destination: D:\Temp\PngFiles\van-map-PE-100-1.png".
What if: Performing the operation "Rename File" on target "Item: D:\Temp\PngFiles\van-map-PE 160-2.png Destination: D:\Temp\PngFiles\van-map-PE-160-2.png".
What if: Performing the operation "Rename File" on target "Item: D:\Temp\PngFiles\van-map-PE 200-8.png Destination: D:\Temp\PngFiles\van-map-PE-200-8.png".
What if: Performing the operation "Rename File" on target "Item: D:\Temp\PngFiles\van-map-PE 400-6.png Destination: D:\Temp\PngFiles\van-map-PE-400-6.png".



Get-ChildItem -Path 'D:\Temp\PngFiles' | 
ForEach { 
    $NewFileName = $_.FullName -replace ' ','-'
    Rename-Item -Path $_.FullName -NewName $NewFileName -Verbose # -WhatIf
}

Get-ChildItem -Path 'D:\Temp\PngFiles'


 Get-ChildItem -Path 'D:\Temp\PngFiles'


    Directory: D:\Temp\PngFiles


Mode                LastWriteTime         Length Name                                                                           
----                -------------         ------ ----                                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE-100-1.png                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE-160-2.png                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE-200-8.png                                                           
-a----        9/28/2018   8:59 PM              0 van-map-PE-400-6.png                                                           
    
por 29.09.2018 / 03:15