仅适用于少数文件的 Powershell 命令

Powershell command that only works properly for a few files

我有一堆名为 001.jpg002.jpg 等的文件。我想重命名它们 Gym Heroes - 001 (US).jpg,等等。我写了这个 Powershell 命令:

dir | Rename-Item -NewName { "Gym Heroes - " + $_.name.Insert(3," (US)") }

当有 35 张或更少的图片时,这会按预期工作,但从 36 张图片开始,所有图片都被奇怪地重命名 (Gym Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - Gym (US) Heroes - 016 (US).jpg),我收到每个文件的以下错误消息(不是确切的错误消息,因为我将其翻译成英文):

Rename-Item : Part of the access path is impossible to find.
At character Line:1 : 7
+ dir | Rename-Item -NewName { "Gym Heroes - " + $_.name.Insert(3," (US ...
+       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (D:\Downloads... - 062 (US).jpg:String) [Rename-Item], DirectoryNotFoundE
   xception
    + FullyQualifiedErrorId : RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommande

我完全不明白为什么会这样...我可以将我的图片重命名为 35 x 35,但我想了解为什么我的命令无法正常工作。

谢谢!

您需要在括号中包含您的 dir/gci 命令,以强制它先求值。否则,您可能会得到一些看似已处理多次的项目。

所以...

(dir) | Rename-Item -NewName { "Gym Heroes - " + $_.name.Insert(3," (US)") }

我建议您适当地循环浏览您的文件并一个一个地重命名。

dir | % {
    $_ | Rename-Item -NewName { "Gym Heroes - " + $_.name.Insert(3," (US)") }
}

我不确定 dir 命令中的管道 Rename-Item 是如何工作的。

无论如何,用 2,000 个文件对此进行了测试。