如何使用regex重命名Powershell中的文件?

如何使用regex重命名Powershell中的文件?,regex,powershell,Regex,Powershell,我有一些文件,文件名末尾有单词字符和数字。由于某种原因,我的正则表达式不起作用。以下是我的文件名示例: test abc12345.zip abcd def98765.zip test xyz23456.zip 这是我的正则表达式: dir | rename-item -NewName {$_.name -replace "(\w\w\w\d\d\d\d\d.zip)","[$1].zip"} 当我运行选择代码段时,它会删除: abc12345 def98765 xyz23456 从文件名

我有一些文件,文件名末尾有单词字符和数字。由于某种原因,我的正则表达式不起作用。以下是我的文件名示例:

test abc12345.zip
abcd def98765.zip
test xyz23456.zip
这是我的正则表达式:

dir | rename-item -NewName {$_.name -replace "(\w\w\w\d\d\d\d\d.zip)","[$1].zip"}
当我运行选择代码段时,它会删除:

abc12345
def98765
xyz23456
从文件名开始,只插入括号:

test [].zip
abcd [].zip
test [].zip
如何将内容保留在括号内?不确定为什么我的代码会删除[]之间的所有内容

test [abc12345].zip
abcd [def98765].zip
test [xyz23456].zip

将双引号替换为单引号。Powershell解析双引号的内容,并将
$1
替换为(不存在/空)变量
$1


此外,通过对单词和数字字符使用量词,可以简化正则表达式,因此

 (\w\w\w\d\d\d\d\d.zip)
可以更改为此较短的版本

(\w{3}\d{5}.zip)

查看您的预期输出,您当前的捕获组(包括.zip扩展名)存在另一个问题。您真正想要的,而不是捕获所有内容,包括扩展

(\w{3}\d{5}.zip)
仅捕获单词/数字部分

(\w{3}\d{5}).zip
现在,您可以使用捕获组在其周围放置括号。最后的正则表达式和替换项可能如下所示

dir | rename-item -NewName {$_.name -replace '(\w{3}\d{5}).zip','[$1].zip'}

我看到了我犯的另一个错误:dir | rename item-NewName{$\.name-replace“(\w\w\w\d\d\d\d\d\d.zip“,“[$1].zip”}在组外移动了.zip,但代码运行良好。谢谢可能重复的