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

use*_*976 4 regex powershell

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

test abc12345.zip
abcd def98765.zip
test xyz23456.zip
Run Code Online (Sandbox Code Playgroud)

这是我的正则表达式:

dir | rename-item -NewName {$_.name -replace "(\w\w\w\d\d\d\d\d.zip)","[$1].zip"}
Run Code Online (Sandbox Code Playgroud)

当我运行选择片段时,它会删除:

abc12345
def98765
xyz23456
Run Code Online (Sandbox Code Playgroud)

从文件名中提取并插入括号:

test [].zip
abcd [].zip
test [].zip
Run Code Online (Sandbox Code Playgroud)

如何将内容保留在括号内?不知道为什么我的代码删除了 [] 之间的所有内容

test [abc12345].zip
abcd [def98765].zip
test [xyz23456].zip
Run Code Online (Sandbox Code Playgroud)

Lie*_*ers 7

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


此外,通过对单词和数字字符使用量词,可以使您的正则表达式变得更简单,所以这

 (\w\w\w\d\d\d\d\d.zip)
Run Code Online (Sandbox Code Playgroud)

可以更改为这个较短的版本

(\w{3}\d{5}.zip)
Run Code Online (Sandbox Code Playgroud)

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

(\w{3}\d{5}.zip)
Run Code Online (Sandbox Code Playgroud)

捕获单词/数字部分

(\w{3}\d{5}).zip
Run Code Online (Sandbox Code Playgroud)

现在您可以使用捕获组将它们括起来。您的最终正则表达式和替换可能如下所示

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