首页 文章

PowerShell命令在文件名中间插入1个字符

提问于
浏览
1

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

我在PowerShell中试过这个:

Dir | Rename-Item -NewName { $_.name -replace "_","_1" }

它在我的目录中的许多文件上工作,然而,它在其他一些文件上发疯了,并试图在一些文件名中添加一个看似无限的1s循环 . 错误消息是:

Rename-Item:指定的路径,文件名或两者都太长 . 完全限定的文件名必须少于260个字符,目录名必须少于248个字符 . 在行:1 char:7 Dir | Rename-Item -NewName {$ .name -replace“”,“_ 1”} ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~ CategoryInfo:WriteError:(C:\用户\米歇尔... 11111111109.JPG:字符串)[重命名-项目],PathTooLongExcepti上FullyQualifiedErrorId:RenameItemIOError, Microsoft.PowerShell.Commands.RenameItemCommand

很高兴在这里采取替代方法 . 了解我实际上做错了什么是完成重命名的第二个目标!谢谢 .

1 回答

  • 1

    我想问题是管道运行而 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 { ... }
    

相关问题