我在这个问题上得到了一些帮助
Renaming a range from files w/Powershell - from first to third from last hyphen
,效果很好,但是现在我遇到了一个新问题。
我的csv文件名现在具有随机数的连字符,如下所示:
abc-def-ghi-jkl-mno-pqr-s-tuv-ke-traffic-by-domains-17-Oct-2018_23-49-38-6d73395f476ad09a7506dc00533933b8.csv
abc-def-ghi-jkl-ke-traffic-by-domains-15-Oct-2018_05-20-36-75eabae7c4123198ff5fe6f4f642449f.csv
abc-def-ghi-jkl-mno--ke-traffic-by-domains-12-Oct-2018_06-23-58-b13eb8f362c09fbe405458fac8af8f8e.csv
连字符的数量因文件而异。
我想使用powershell将其重命名为
abc-17-Oct-2018.csv
abc-15-Oct-2018.csv
abc-12-Oct-2018.csv
我尝试了以下操作:
1。删除“ _”之后的所有内容
Get-ChildItem -Filter *.csv | Foreach-Object -Process {
$NewName = [Regex]::Match($_.Name,"^[^_]*").Value + '.csv'
$_ | Rename-Item -NewName $NewName
}
2。删除第一个“-”之后的所有内容,直到“ ke-traffic-by-domains-”
Get-ChildItem -Filter *.csv | Rename-Item -NewName {
$word = "-*ke-traffic-by-domains-"
$NewName = $_.Name -split $word + '.csv'
$_ | Rename-Item -NewName $NewName
}
但是我坚持要2号删除带有正则表达式的范围。
有人可以告诉我一种更改文件名的方法吗?
答案 0 :(得分:2)
使用正则表达式匹配您的条件(请参见Regex101.com)
Get-ChildItem *.csv |
Where-Object Name -match '^([^\-]+)-.*?-traffic-by-domains-(\d{1,2}-\D{3}-20\d{2})_'|
Rename-Item -NewName {"{0}-{1}.csv" -f $Matches[1],$Matches[2]} -WhatIf
如果输出看起来正常,请删除结尾的-WhatIf
在示例csv名称上运行脚本后,我的Ramdrive上的文件:
> gci
Verzeichnis: A:\
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2018-11-05 09:38 0 abc-12-Oct-2018.csv
-a---- 2018-11-05 09:38 0 abc-15-Oct-2018.csv
-a---- 2018-11-05 09:38 0 abc-17-Oct-2018.csv