【发布时间】:2021-04-13 15:12:24
【问题描述】:
我是使用 powershell 的新手,我需要一些关于脚本的帮助。
我一直在使用dir | Rename-Item -NewName {$_.Name -replace "Abc_123", "XYZ"}
更改文件夹中的大量文件名,但我想做更多。
我需要从“Alex_Chris_123_456_ABC”更改为“AC_123_456_ABC”。
我想是这样的。
Get-ChildItem -File -Recurse | % { Rename-Item -Path $_.PSPath -NewName $_.Name.replace("Abc_123", "XYZ")}
但这只会改变特定的字符。如何在第一个整数之前添加一个条件语句来获取字符串的第一个字符?
【问题讨论】:
-
你可以使用
"Alex_Chris_123_456_ABC" -replace '^([a-z])[a-z]*_([a-z])[a-z]*','$1$2'。 -
您的文件名格式的可预测性如何?涵盖所有场景可能会变得复杂,例如
[regex]::Replace("Alex_Chris_123_456_ABC",'(?i)^(?:[a-z]+_)+',{(-join ($args[0].Value -split '_' |% {[string]$_[0]}))+'_'})适用于 1 个或多个名称,但您需要用下划线分隔名称的各个部分。但是[regex]::Replace("Alex?Cross-123_456_ABC",'(?i)^(?:[a-z]+[^a-z])+',{(-join ($args[0].Value -split '[^a-z]' |% {[string]$_[0]}))+([string]$args[0])[-1]})可以用于任何非字母分隔符。 -
感谢您的回复。文件名有些可预测,因为它们是来自我们处理程序的数据文件。名称用下划线分隔。如何包含正则表达式,以便它读取所有文件、文件夹和子文件夹并重命名它们?
-
我们还没有收到您的来信.. 我的回答解决了您的问题吗?如果是这样,请通过单击左侧的大复选标记图标
✓来考虑accepting。这将帮助其他有类似问题的人更轻松地找到它。
标签: powershell rename batch-rename