使用PowerShell批量删除文件名开头的字符时出现问题

使用PowerShell批量删除文件名开头的字符时出现问题,powershell,Powershell,我试图使用Powershell整理一批文件名,但出现以下错误: Rename-Item : Cannot create a file when that file already exists. At line:1 char:7 + Dir | Rename-Item -NewName {$_.Name.Substring(0,$_.BaseName.Length-4) ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我试图使用Powershell整理一批文件名,但出现以下错误:

Rename-Item : Cannot create a file when that file already exists. At line:1 char:7 + Dir | Rename-Item -NewName {$_.Name.Substring(0,$_.BaseName.Length-4) ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : WriteError: (C:\Users\garet\...e Mine (1).mp3:String) [Rename-Item], IOException + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand
我认为您的命令目前并没有删除前4个字符,而是删除了最后4个字符。试试这个:

Dir | Rename-Item -NewName {$_.name.substring(4,$_.BaseName.length-4) + $_.Extension}
您可以进一步简化这一点,就好像您希望字符串的完整长度在开始时减少字符数一样,您只需提供起始索引即可

Dir | Rename-Item -NewName {$_.name.substring(4) + $_.Extension}
例如:

'test'.substring(2)
产出:

st
说明:


使用
substring
时,传递两个值,第一个值是要从中开始的字符串的字符索引,第二个值是要从该点捕获的字符串中的多少个字符。

我认为您的命令此时并没有删除前4个字符,而是删除最后4个字符。试试这个:

Dir | Rename-Item -NewName {$_.name.substring(4,$_.BaseName.length-4) + $_.Extension}
您可以进一步简化这一点,就好像您希望字符串的完整长度在开始时减少字符数一样,您只需提供起始索引即可

Dir | Rename-Item -NewName {$_.name.substring(4) + $_.Extension}
例如:

'test'.substring(2)
产出:

st
说明:


使用
子字符串时
传递两个值,第一个值是要从中开始的字符串的字符索引,第二个是要从该点捕获字符串的多少个字符。

添加
-WhatIf
切换到rename命令以查看将获得什么类型的文件名。添加
-WhatIf
切换到rename命令以查看将获得什么类型的文件名。@DannyFarrell您应该这样做,或者提供一个有用的答案。(+1)@DannyFarrell你应该给出一个有用的答案。(+1)