![如何使用 Powershell 将所有名称格式为“带空格的数字 [空格] 名称”的文件重命名为“带空格的数字 [连字符] 名称”?](https://linux22.com/image/1668908/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Powershell%20%E5%B0%86%E6%89%80%E6%9C%89%E5%90%8D%E7%A7%B0%E6%A0%BC%E5%BC%8F%E4%B8%BA%E2%80%9C%E5%B8%A6%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%95%B0%E5%AD%97%20%5B%E7%A9%BA%E6%A0%BC%5D%20%E5%90%8D%E7%A7%B0%E2%80%9D%E7%9A%84%E6%96%87%E4%BB%B6%E9%87%8D%E5%91%BD%E5%90%8D%E4%B8%BA%E2%80%9C%E5%B8%A6%E7%A9%BA%E6%A0%BC%E7%9A%84%E6%95%B0%E5%AD%97%20%5B%E8%BF%9E%E5%AD%97%E7%AC%A6%5D%20%E5%90%8D%E7%A7%B0%E2%80%9D%EF%BC%9F.png)
我有很多文件的名称格式为“数字 [空格] 带空格的名称”或“(数字)[空格] 带空格的名称”,例如:
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' }