我需要移动一个序号或有时一个带字母的随机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。
答案 0 :(得分:0)
基本的“更改文件名”脚本是:
Get-ChildItem -LiteralPath 'C:\Path\To\Files'
Rename-Item
-NewName
与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
行。