![文件重命名脚本(移动文件名的一部分)](https://linux22.com/image/1534366/%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E8%84%9A%E6%9C%AC%EF%BC%88%E7%A7%BB%E5%8A%A8%E6%96%87%E4%BB%B6%E5%90%8D%E7%9A%84%E4%B8%80%E9%83%A8%E5%88%86%EF%BC%89.png)
我有包含 2-
的文件名。
在第一个之前,文本总是一样的(
daughter of moon
)。第一个之后
-
(后跟一个空格,之前-
也是一个空格)通常是一些数字(但也可以是一些文本)。第二次之后也
-
类似。
我想将我的文件名分成 3 个部分part1 - part2 - part3.jpg
。
我想要一个可以移动(=切换部分)的part3
脚本part2
。
稍后我希望能够切换一些part2
和part1
。
我尝试过类似的事情
get-childItem 'daugther of moon - * - 2*.jpg' | rename-item -newname ` { $_.name -replace ($x.split('moon -')[0], $x.split(' - ^ - ')[1], $x.split('- 2')[2], $x.split('.')[3] -join)}
但这似乎不起作用。
我究竟做错了什么?
答案1
()
以下脚本使用正则表达式从除以的元素构建组,-
并重新排列它们以构建新名称
# Change path to fit your environment
Pushd "A:\"
Get-ChildItem 'daugther of moon - * - *.jpg' |
Where BaseName -match '(daugther of moon) - (.*) - (.*)'|
Rename-Item -NewName {$matches[1]+' - '+`
$matches[3]+' - '+`
$matches[2]+$_.Extension} -Confirm
PopD
当 Rename-Item 接受管道输入时,脚本块会{}
按照新顺序组装元素。
A:\
我的RAM 驱动器上的示例输出
Confirm
Are you sure you want to perform this action?
Performing the operation "Rename File" on target
"Item: A:\daugther of moon - one - two.jpg
Destination: A:\daugther of moon - two - one.jpg".
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
答案2
批量重命名实用程序 (http://www.bulkrenameutility.co.uk/Main_Intro.php,免费软件)可以完成您想要的工作,甚至更多,尽管我确实意识到这并没有回答您关于在 PowerShell 上做错什么的问题……(我会使用它的 RegEx 功能来实现您的目标)
答案3
当进行比较复杂的操作时,如果将其分解开来会更容易理解。
$files = Get-ChildItem 'daugther of moon - * - 2*.jpg'
$files | ForEach-Object {
$parts = $_.BaseName.Split("-")
$partOne = $parts[0].Trim()
$partTwo = $parts[1].Trim()
$partThree = $parts[2].Trim()
Rename-Item $_ -NewName "$partOne - $partThree - $partTwo$($_.Extension)"
}