ฉันพยายามเปลี่ยนชื่อไฟล์เป็นจำนวนมากด้วย PowerShell แต่ฉันพบข้อผิดพลาดซึ่งฉันไม่รู้ว่าจะทำอย่างไรและการค้นหามันไม่ได้ให้วิธีการแก้ปัญหาเช่นกัน
ข้อความผิดพลาด:
Rename-Item : Cannot convert 'System.Object[]' to the type 'System.String' required by parameter 'NewName'.
ตัวอย่างเช่น: 2068227794 (0x8f860be3).bnk
ถึง0x8f860be3_0001.bnk
ในกรณีนี้โดยเฉพาะอย่างยิ่งคือ$hex_name
0x8f860be3
$source = "K:\_test"
Get-ChildItem -Path $source -File -Recurse -Include "* (0x*).*" | ForEach-Object {
$prefix, $hex_name = ($_.BaseName).Split('()')
Rename-Item -Path $_ -NewName ($hex_name + "_0001" + $_.Extension)
}
2
การแยกนั้นจะส่งคืนสามองค์ประกอบดังนั้น $ hex_Name จะเป็นอาร์เรย์ที่มีสององค์ประกอบ
—
EBGreen
ชื่อไฟล์ตัวอย่างคืออะไรและคุณคาดหวังว่าชื่อใหม่จะเป็นอย่างไร ตัวอย่างข้อมูลและความคาดหวังเป็นสิ่งสำคัญสำหรับการถามคำถามที่ดี
—
EBGreen
ลองอ้างอิง
—
Frank Thomas
$hex_name[0]
เพื่อรับสิ่งที่0x8f860be3
ปราศจาก parens หรือเปลี่ยนสิ่งที่คุณชอบ$firstParen, $hex_name, $secondParenAndExt = ($_.BaseName).Split('()')
$ hex_name = ($ _. BaseName) .Split ('()') [1]
—
EBGreen
ฉันคิดว่าคุณได้ลองสิ่งที่ชอบ
—
Pimp Juice IT
($hex_name + "_0001" + $_.Extension).ToString()
และได้รับการยืนยันแล้วว่าไม่ได้ผล docs.microsoft.com/en-us/dotnet/api/… . แม้ว่าคุณจะต้องตั้งค่าเป็นตัวแปรภายในลูปแล้วใช้กับRename-Item
.... เพียงแค่ไอเดียที่รวดเร็วโดยไม่มีการทดสอบ