我有多个具有相同命名约定的文件:
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,'_')