我在使用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
答案 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}来将字符插入到字符串中}}
答案 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部分。我希望这有帮助!