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

时间:2018-03-20 23:21:38

标签: powershell rename move bulk suffix

我需要移动一个序号或有时一个带字母的随机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。

1 个答案:

答案 0 :(得分:0)

基本的“更改文件名”脚本是:

  • 获取文件名Get-ChildItem -LiteralPath 'C:\Path\To\Files'
  • 将结果导入Rename-Item
  • 将属性-NewName与scriptblock {}
  • 一起使用
  • 在scriptblock中,用于从旧名称
  • 计算新名称的代码
  • 从路径和扩展名中提取文件名
  • 更改
  • 将路径和扩展程序重新打开
  

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

文本处理完全是关于细节,细节使代码更复杂,小细节可能使整个方法无效。

我对你说的原因一点都不清楚:

  

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

为什么你会从指定字符数中受益,而不是让理想的脚本移动“所有这些”?

这个脚本应该这样做:

$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)})", '$2_$1'

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

}

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

如果您不需要指定计数,只需将所有内容添加到扩展程序,请将(.{$($count)})替换为(.*),然后移除Read-Host行。