0

我需要移动一个序列号,或者有时是一个带有字母的随机 ID。

举个例子:

澳大利亚_布里斯班_NP_©_Hello_World_1163  
澳大利亚_布里斯班_NP_©_Hello_World_1164  
澳大利亚_布里斯班_NP_©_Hello_World_1165  
澳大利亚_布里斯班_NP_©_Hello_World_AHDFGF
澳大利亚_布里斯班_NP_©_Hello_World_GHRADQ
澳大利亚_布里斯班_NP_©_Hello_World_QGASFS

我需要做的是©_Hello_World最后将ID移到后面©,示例如下:

澳大利亚_布里斯班_NP_1165_©_Hello_World  
澳大利亚_布里斯班_NP_AHDFGF_©_Hello_World

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

我尝试搜索很多不同的脚本,但是它们要么不起作用,要么太复杂,我无法将它们调整为所需的内容。

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

4

1 回答 1

0

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

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

我尝试搜索很多不同的脚本,但是它们要么不起作用,要么太复杂,我无法适应所需的内容。

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

我根本不清楚你为什么说:

理想的脚本允许我在单词末尾指定 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行。

于 2018-03-21T00:16:56.037 回答