1

У меня есть несколько изображений в папке, как

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

Теперь я хочу удалить все пробелы между PE xxx- и заменить его - как

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

Я использовал эту команду в Power Shell

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

но я получаю эту ошибку

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

2 ответа2

2

Ваш синтаксис правильный. Проблема в том, что в конце вашего утверждения скрыт нежелательный персонаж. Обратите внимание, что ~ в ошибке подчеркивает пустоту после вашего кода. У вас есть нежелательный знак порядка байтов (BOM) после последней фигурной скобки. Просмотр вашего кода в шестнадцатеричном редакторе показывает следующее:

разрешение

Начиная с конца кода, нажимайте клавишу Backspace до тех пор, пока закрывающая фигурная скобка не исчезнет. Это гарантирует, что вы удалили спецификацию. После удаления закрывающей фигурной скобки добавьте ее снова. В качестве альтернативы, скопируйте эту исправленную версию вашего заявления:

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

Дополнительная информация

EF BB BF () - это спецификация для UTF-8. Эта проблема присутствует только в вашем оригинальном сообщении. Поскольку ваше сообщение было отредактировано, я не вижу символ спецификации в вашем коде Powershell (хотя я не вижу, чтобы он был явно удален с помощью редактирования). Если вы захотите просмотреть историю своего исходного сообщения, вы сможете захватить нежелательную спецификацию.

0

Вот дубль, который должен сделать это для вас. Другие, конечно, получат свое.

'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                                                           

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .