我有很多文件的名称格式为“数字 [空格] 带空格的名称”或“(数字)[空格] 带空格的名称”,例如:
23 文件名 23 带空格.txt
(47) 文件名 47 带空格.txt
它们分布在多个目录中,我需要它们采用“带有空格的数字连字符名称”格式,例如:
23-文件名 23 带有空格.txt
47-文件名 47 带有空格.txt
当我有一个固定模式时,我可以使用这个命令递归查找文件然后重命名它们,没有任何问题:
get-childitem -filter "*pattern*" -recurse | rename-item -newname {$_.Name -replace "pattern", "new string"}
我正在努力使用正则表达式(?)或通配符来a)找到文件,然后更重要的是b)进行更新。
只要重命名不会处理与模式不匹配的文件,那么部分 a) 就不那么重要。
答案1
尝试以下 cmdlet:
gci -Recurse -file | where { $_.Name -match '^\(?\d+\)? .+' } | Rename-Item -NewName { $_.Name -replace '^\(?(\d+)\)? (.+)' , '$1-$2' }