[英]Rename file with powershell (variable file name structure)
目前我在使用 powershell 重命名文件名时遇到问题。 我实际上能够重命名特定文件夹中的文件,但是如果结构不同,则命令失败。
示例文件:
test file - 1234 - copy.docx
test file - 1234.pdf
我正在运行以下命令:
Get-ChildItem <location> -file | foreach {
Rename-Item -Path $_.FullName -NewName ($_.Name.Split("-")[0] + $_.Extension) }
我想在最后一个“-”之前保留文件名。 但是如果我运行我的命令,我总是在第一个“-”之前得到文件名。
对更好的方法有什么建议吗?
最直接的方法:
Get-ChildItem <location> -File | Rename-Item -NewName {
$index = $_.BaseName.LastIndexOf("-")
if ($index -ge 0) {
$_.BaseName.Substring(0, $index).Trim() + $_.Extension
}
else { $_.Name }
}
正则表达式替换:
Get-ChildItem <location> -File |
Rename-Item -NewName {($_.BaseName -replace '(.*)-.*', '$1').Trim() + $_.Extension}
您可以使用RegEx
来实现所需的输出:
Rename-Item -Path $_.FullName -NewName (($_.Name -replace '(.*)-.*?$','$1') + $_.Extension) }
(.*)-.*?$
选择所有字符(贪婪)直到最后一个-
在行尾之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.