批量重命名 - 再次

Batch Renaming - Again

我正在帮助一家慈善机构解决他们遇到的一些 IT 问题。其中一部分是整理他们的文件和工作。我正在尝试编写一些重命名脚本,但运气不佳!

他们有很多视频博客、音频文件和 word 类型的文档,文件名都不好。糟糕如老人和他的狗.mp4

开头有很多"The" "i" "A"等。我现在已经根据文件类型分类到文件夹中了。但仍然想更新文件名以阅读更多 like

老人和他的狗 (The).mp4

你能帮我一点忙吗,因为我对 Powershell 还是个新手,还在工作中学习。

我已经能够删除文件名的第一部分,但不知道如何将其添加到文件名的末尾。

Get-ChildItem The*.* |Rename-Item -NewName {$_.name -替换"The ",''}

例如,我需要搜索所有子文件夹并找到所有以 "The " 开头的文件和文件夹。

所以之前:- 老人和他的狗.mp4

并将文件保存在该文件夹中

并将其重命名为 Old Man and His Dog (The).mp4

您可以组合应该从文件名开头删除的不同单词,并使用如下方式将其放在名称末尾的括号中:

# create an array of words that start the file name and should be moved towards the back
$words = 'The', 'i', 'a'

# create a regex pattern where all possible words are separated by the regex OR (|) sign
$re = '^({0})[ ,]+' -f ($words -join '|')

Get-ChildItem -Path 'D:\' -File | Where-Object { $_.Name -match $re } | ForEach-Object {
    $newName = '{0} ({1}){2}' -f ($_.BaseName -replace $re), $matches[1], $_.Extension
    $_ | Rename-Item -NewName $newName -WhatIf
}

示例输出

D:\The Old Man and his dog.mp4   --> D:\Old Man and his dog (The).mp4
D:\A Nightmare on Elm Street.mp4 --> D:\Nightmare on Elm Street (A).mp4
D:\I, Robot.mkv                  --> D:\Robot (I).mkv

如果控制台输出正常,请移除 -WhatIf 开关