如何使用正则表达式重命名Powershell中的文件?

时间:2019-02-02 12:01:05

标签: 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 [].zip
abcd [].zip
test [].zip

如何将内容保留在方括号内?不知道为什么我的代码会删除[]

之间的所有内容
test [abc12345].zip
abcd [def98765].zip
test [xyz23456].zip

1 个答案:

答案 0 :(得分:2)

替换双引号为单引号。 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'}