我有一些文件名末尾带有单词和数字的文件。由于某种原因,我的正则表达式无法正常工作。这是我的文件名示例:
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
答案 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'}