文件重命名脚本(移动文件名的一部分)

文件重命名脚本(移动文件名的一部分)

我有包含 2-的文件名。

  • 在第一个之前,文本总是一样的(daughter of moon)。

  • 第一个之后-(后跟一个空格,之前-也是一个空格)通常是一些数字(但也可以是一些文本)。

  • 第二次之后也-类似。

我想将我的文件名分成 3 个部分part1 - part2 - part3.jpg

我想要一个可以移动(=切换部分)的part3脚本part2

稍后我希望能够切换一些part2part1

我尝试过类似的事情

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)"
}

相关内容