批量移动序列号(后缀)- 图像、JPEG、RAW 等

Bulk Move Sequential Numbers (Suffix) - Images, JPEG, RAW etc

我需要移动序号或有时是带有字母的随机 ID。

举个例子:

Australia_Brisbane_NP_©_Hello_World_1163  
Australia_Brisbane_NP_©_Hello_World_1164  
Australia_Brisbane_NP_©_Hello_World_1165  
Australia_Brisbane_NP_©_Hello_World_AHDFGF
Australia_Brisbane_NP_©_Hello_World_GHRADQ
Australia_Brisbane_NP_©_Hello_World_QGASFS

我需要做的是在末尾添加 ©_Hello_World 并将 ID 移到 © 后面,示例如下:

Australia_Brisbane_NP_1165_©_Hello_World  
Australia_Brisbane_NP_AHDFGF_©_Hello_World

理想的脚本允许我在不影响扩展名的情况下在单词末尾指定 1-15 个字符,并将 1-15 个字符移到 后面。

我已经尝试搜索很多不同的脚本,但是它们要么不起作用,要么太复杂,我无法根据需要调整它们。

我无法使用任何外部软件,因此我必须坚持使用 PowerShell。

基本 "change filename" 脚本是:

  • 获取文件名Get-ChildItem -LiteralPath 'C:\Path\To\Files'
  • 将结果输入 Rename-Item
  • 将 属性 -NewName 与脚本块一起使用 {}
  • 在脚本块中,根据旧名称计算新名称的代码
  • 从路径和扩展名中提取文件名
  • 改变它
  • 重新打开路径和扩展名

I have tried searching for a lot of different scripts however either they do not work or they are too complicated for me to adapt them to what is required.

文本处理都是关于细节的,细节使代码更复杂,小细节会使整个方法失效。

我完全不清楚你为什么说:

The ideal script would allow me to specify between 1-15 characters at the end of the word without effecting the extension and move the 1-15 characters behind _©.

为什么您会受益于指定字符数,而不是让理想的脚本移动 "all of them"?

这个脚本应该可以做到:

$count = Read-Host -Prompt 'How many characters to move?'


Get-ChildItem -LiteralPath 'C:\Path\To\Files' | 
    Rename-Item -NewName { 

        $newName = $_.BaseName -replace "(©_Hello_World)_(.{$($count)})", '_'

        "$($_.DirectoryName)/$($newName + $_.Extension)"

}

铌。它会移动您要求的计数,即使那里有更多字符。

如果不需要指定计数,只取全部到扩展名,则将(.{$($count)})替换为(.*),并删除Read-Host行。