通过将字符串从文件名的后面移到前面来重命名文件名

问题描述

我正在尝试通过将字符串从文件名的后面移到前面来重命名文件名:
下午-Prebills_10Aug20_Project _ 3359122596 H至: 3359122596下午-Prebills_10Aug20 _

我正在尝试使用此脚本,然后删除“项目”,但无法使其正常工作:

Get-ChildItem *.pdf | Rename-Item -NewName { 
$_.Name -replace '(Project\d{*}) - (.*?)\.pdf$','$1 - 
$2.pdf' } -WhatIf

解决方法

将此修改为您的代码:

Clear-Host
$FName = "PM - Prebills_10Aug20_Project_3359122596 H"
#-------- Start Here -------
$Parts = $FName.Split("_")
$FName = $Parts[3] + " " + $Parts[0] + "_" + $Parts[1]
#-------- End Here -----
$FName

结果:3359122596下午-Prebills_10Aug20

它取消尾随的下划线,如果需要可以将其重新添加。您也可以轻松地删除开票前和日期之间的下划线,并用空格代替。

HTH

,

我会这样做:

 foreach($file in (Get-ChildItem *.pdf )){
        $temp = $file -split '_'
        $newname= $temp[3] + " " + $temp[1] + "_" + $temp[2] + "_"
        Rename-item "$file" -NewName "$newname"
    }
,

这有效。我不知道该模式的通用性。查看https://regex101.com,以试用正则表达式。

Get-ChildItem *.pdf | 
  Rename-Item -NewName { $_.Name -replace '(.*)Project _ (\d{10} H)','$2 $1' } -WhatIf

What if: Performing the operation "Rename File" on target 
"Item:       C:\users\admin\PM - Prebills_10Aug20_Project _ 3359122596 H.pdf 
Destination: C:\users\admin\3359122596 H PM - Prebills_10Aug20_.pdf".