Powershell 在文件名中间插入1个字符的PuthS壳命令

Powershell 在文件名中间插入1个字符的PuthS壳命令,powershell,rename-item-cmdlet,Powershell,Rename Item Cmdlet,有一个名为IMG_xxxx.JPG的图像目录,其中x是一个整数。我需要在下划线后插入一个“1”,这样每个名称都变成IMG_1xxxx.JPG 我在PowerShell中尝试过: Dir | Rename-Item -NewName { $_.name -replace "_","_1" } 它在我的目录中的许多文件上工作,然而,它在其他一些文件上变得疯狂,并试图在一些文件名中添加一个看似无限的1循环。错误消息为: 重命名项:指定的路径、文件名或两者都太长。完全限定文件名必须小于260 字符,并

有一个名为IMG_xxxx.JPG的图像目录,其中x是一个整数。我需要在下划线后插入一个“1”,这样每个名称都变成IMG_1xxxx.JPG

我在PowerShell中尝试过:

Dir | Rename-Item -NewName { $_.name -replace "_","_1" }
它在我的目录中的许多文件上工作,然而,它在其他一些文件上变得疯狂,并试图在一些文件名中添加一个看似无限的1循环。错误消息为:

重命名项:指定的路径、文件名或两者都太长。完全限定文件名必须小于260 字符,并且目录名称必须少于248个字符。 第1行字符:7 +目录|重命名项-新名称{$.name-替换“”“_1”} + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +CategoryInfo:WriteError:(C:\Users\michel…111111109.JPG:String)[重命名项],PathTooLongExcepti 在…上 +FullyQualifiedErrorId:RenameItemIOError,Microsoft.PowerShell.Commands.RenameItemCommand


很高兴在这里有另一种方法。理解我到底做错了什么是完成重命名的第二个目标!谢谢。

我想问题在于管道运行时,
Get ChildItem
仍在枚举文件。您可能应该首先枚举所有文件,然后重命名它们,这样重命名的文件就不会被拾取两次:

(dir) | rename-Item -new { $_.name -replace '_','_1' }
括号确保首先对
dir
进行完整计算,然后将其结果传递给管道的其余部分。这在概念上与

$files = dir
$files | rename-item ...
另一个选项是检查是否需要重命名文件:

dir | where { $_.Name -match '_\d{4}\D' } | rename-item -NewName { ... }

成功了!一旦我将您的“rename”错误类型修复为“rename item”,那么更正后的行将是:(dir)| rename item-new{$\uu.name-replace'\u1'}。。。非常感谢(快速)保存。刚刚在这里试用,注意到
rename
不是别名,并修复了答案中的该部分。还注意到你的问题似乎不是每次都发生。也许有点取决于文件夹中的文件数。735,不管它值多少:D代表未来的谷歌感谢alias fix。