Rename-Item - 项不存在(PowerShell中的ANSI字符问题)

时间:2013-10-20 19:23:55

标签: powershell ansi rename-item-cmdlet

我在使用PowerShell重命名包含ANSI字符的项目时遇到问题。

例如“\MichaelBublé”或“\ Green Day \¡DOS”中的“é”等字符。

我想要做的是将“\”@Bubblé“重命名为”\ Michael Buble“。

我已经完成了将字符映射到a-z字符的代码。问题是,当我执行Rename-Item操作或删除操作时,系统报告该文件不存在。

我认为这可能是编码问题。我找不到任何方法。

ren : Cannot rename because item at 'Michael Bublé' does not exist.
At C:\...\Replace_non_Ascii_FileObjectName.ps1:24 char:5
+     ren $_ $NewName 
+     ~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [Rename-Item], PSInvalidOperationException
    + FullyQualifiedErrorId : InvalidOperation,Microsoft.PowerShell.Commands.RenameItemCommand

3 个答案:

答案 0 :(得分:1)

你的问题在细节上有点吝啬,所以很难猜出发生了什么。如果您提供逐字使用的完整命令而不是描述它们,将会有所帮助。另外,您如何在命令中输入é?您是否从目录列表中复制文件名,是使用具有该字符的键盘或键盘模拟器,您是将其键入文字处理器并从那里复制......?您越详细和具体,就越有可能有人能够回答您的问题。

但是,我可以提出两点建议。

首先,根据你所写的内容,我怀疑特殊字符甚至不是问题。这只发生在具有非ASCII字符的文件名吗?这是你正在使用的命令吗?

Rename-Item "\Michael Bublé" "\Michael Buble"

如果是这样,除非Michael Bublé位于当前工作驱动器的根目录中,否则无法工作,无论您的名称中是否包含非ASCII字符。它应该是

Rename-Item ".\Michael Bublé" ".\Michael Buble"

假设该文件位于当前工作目录中。否则,请提供完整路径,而不是.

第二个问题是,如果您认为编码是个问题,您可以尝试通过将unicode数字转换为 [char] "Michael Bubl$([char]0x00E9)"和{{1}来将字符插入到字符串中}}

然而,这是在黑暗中的一种射击,因为你不应该这样做。如果它在屏幕上正确显示,则PowerShell应正确解释它。特别是如果您从目录列表中复制名称。

答案 1 :(得分:0)

一种可能的解决方法是使用通配符:

dir "Michael Bubl?" | ren -NewName "Michael Buble"

或将其传递到以下地方:

dir | where {$_.Name -eq "Michael Bublé"} | ren -NewName "Michael Buble"

答案 2 :(得分:0)

解决方法是使用< cmd / c重命名...'使用相对路径。我这样做是通过将目录更改为文件所在的文件夹,然后调用cmd rename命令,如下所示:

$num=1
$files = gci -recurse
$files | ForEach-Object{
  $folderPath = split-path $_.Fullname -parent
  $originalFileName = split-path $_.Fullname -leaf
  **$newFileName = "Michael Buble" + $num**
  $num+=1
  cmd /c echo "$folderPath" "$originalFileName" "$newFileName"
  cd $folderPath
  cmd /c rename "$originalFileName" "$newFileName"
}

显然,您可以使用映射替换newFileName部分。我希望这有帮助!