ไม่สามารถแทนที่ Space ด้วยอักขระในการอัปเดตชื่อกลุ่ม


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-และแทนที่ด้วย-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

ฉันใช้คำสั่งนี้ใน 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

คำตอบ:


3

ไวยากรณ์ของคุณถูกต้อง ปัญหาคือตัวละครที่ไม่ต้องการซ่อนอยู่ท้ายคำสั่งของคุณ ขอให้สังเกตว่า~ข้อผิดพลาดในการขีดเส้นใต้สิ่งที่ดูเหมือนจะว่างเปล่าหลังจากรหัสของคุณ คุณมีเครื่องหมายคำสั่งไบต์ (BOM) ที่ไม่ต้องการหลังจากวงเล็บปีกกาสุดท้าย การดูโค้ดของคุณในโปรแกรมแก้ไข hex แสดงให้เห็นสิ่งนี้:

ป้อนคำอธิบายรูปภาพที่นี่

มติ

เริ่มต้นจากจุดสิ้นสุดของรหัสของคุณกด backspace จนกว่าวงเล็บปีกกาปิดจะหายไป สิ่งนี้จะช่วยให้แน่ใจว่าคุณได้ลบ BOM แล้ว เมื่อวงเล็บปีกกาปิดปิดถูกลบออกแล้วให้เพิ่มอีกครั้ง หรือมิฉะนั้นให้คัดลอกคำสั่งเวอร์ชันที่แก้ไขนี้ของคุณ:

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

ข้อมูลเพิ่มเติม

EF BB BF( ) คือ BOM สำหรับ UTF-8 ปัญหานี้มีอยู่ในโพสต์ต้นฉบับของคุณเท่านั้น เนื่องจากโพสต์ของคุณได้รับการแก้ไขฉันไม่เห็นอักขระ BOM ในรหัส Powershell ของคุณ (แม้ว่าฉันจะไม่เห็นว่ามีการลบโพสต์อย่างชัดเจนผ่านการแก้ไข) หากคุณต้องตรวจสอบประวัติของโพสต์ต้นฉบับของคุณคุณจะสามารถบันทึก BOM ที่ไม่ต้องการได้


ฉันมีความรู้สึกว่าฉันขาดอะไรบางอย่างที่นี่ แต่ที่นี่มันไป; คุณบอกฉันได้อย่างไรว่าคุณสามารถแก้ไขรหัสของเขาโดยไม่ต้องเข้าถึงไฟล์สคริปต์จริงของเขาได้อย่างไรและไม่ใช่แค่ข้อความที่วางที่นี่? ฉันไม่เห็นลิงก์ไปยังไฟล์ดังกล่าวที่นี่ ฉันแค่อยากรู้ +1 สำหรับคำตอบของคุณ
reben

ฉันคัดลอกโค้ดที่โพสต์แล้วเท่านั้นฉันไม่สามารถเข้าถึงแหล่งอื่นได้
รู

ขอบคุณสำหรับการตอบกลับ 'รหัสที่โพสต์' - คือ 'ฉันใช้คำสั่งนี้ใน Power shell' หรือไม่ บรรทัดนั้นไม่มีตัวอักษรต่อท้ายตัวอักษรที่ซ่อนอยู่! มันจบลงด้วยวงเล็บปิด?
reben

ฉันดีใจที่คุณแสดงความคิดเห็น สิ่งนี้ทำให้ฉันสับสนเมื่อทบทวนคำตอบของฉัน อักขระถูกลบออกเมื่อมีการแก้ไขโพสต์ ฉันได้แก้ไขคำตอบเพื่อรวมรายละเอียดเพิ่มเติมแล้ว
รู

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                                                           
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.