Regex-重命名文件(将第一个单词移到字符串末尾,删除第三个空格之前的所有内容)



我有多个具有相同命名约定的文件:

NAME发票编号:2020010001 01_01_2020.pdf

请注意,"NAME"可以更短或更长,但始终是附加的。

我希望它变成:

2020010001 NAME.pdf

我必须在powershell脚本中这样做,我可以这样做,但这是我遇到问题的regex部分。

我的想法是将"NAME"存储在一个临时变量中,然后删除字符串中第三个空格之前的所有内容,然后删除最终附加"NAME"的字符串中第一个空格之后的所有内容。

Hey MDUB88我使用了powershell中的split函数。这应该做的工作:

$oldname = "NAME Invoice N° 2020010001 01_01_2020.pdf"
$tmp = $oldname.Split(" ")
$fileextension = $tmp[4].Split(".")[1]
$filename = "$($tmp[3]) $($tmp[0]).$fileextension"

请测试它,让我知道它是否有效,如果有效,请标记我的帖子作为答案:(

如何将-replace与regex分组一起使用,类似于以下内容:

'NAME Invoice N° 2020010001 01_01_2020.pdf' -replace '^(w+) Inv.+ (d+) (dd_dd_d{4})(.pdf)', '$3 $1$4'

为了将来参考,下面是最终脚本:

$directory = (Get-Item -Path ".").FullName
Get-ChildItem -Path $directory -Recurse -File | Move-Item -Destination $directory
Get-ChildItem -Path $directory -Recurse -Directory | Remove-Item
foreach($file in get-childitem -Filter *.pdf -r) {
$oldname = "$file"
$tmp = $oldname.Split(" ")
$fileextension = $tmp[4].Split(".")[1]
$filename = "$($tmp[3]) $($tmp[0]).$fileextension"
$finalfilename = $filename.Insert(6,'_')
Rename-Item $file -newname $finalfilename
}

它实际上在最终名称的第6个字符后添加了一个下划线,这不是最初问题的一部分。这是一条线:

$finalfilename = $filename.Insert(6,'_')

最新更新