写在前面

最近对于修改文件名有了新的需求,就是批量去掉文件名中的括号以及数字,类似这样:​​(1)​​​,但是数字是会随着文件的不同而递增的,这就只能用正则表达式来搞定啦。修改文件名我还是采用了PowerShell,号称Shell中处理字符串速度最快,下面来具体介绍一下操作方法。一些Powershell的函数简介可以看我的另一篇文章:《​​powershell一行代码批量修改文件名(附命令详解)​​》。

问题与分析

我先用​​for​​​循环生成一些测试文件,方便下面的演示,需要用到PowerShell中的​​New-Item​​​方法,代码及结果如下。
P.S. 注意,这里的生成文件名需要加上双引号,否则会报错。

for ($i=1; $i -lt 20; $i++){new-item -name "$i.txt";}

PowerShell正则替换+批量修改文件名_正则表达式


目标就是去掉文件名中的括号以及内部的数字,下面用正则表达式进行实现。需要注意的是,这里面不再使用​​.Replace()​​​方法,而使用字符串处理的​​-replace​​参数,因为只有这个参数支持正则语法。

具体代码及讲解

还是只有一行代码,简洁明了,十分迅速😆。

ls *.txt | foreach{ren $_.name ($_.name -replace '\(\d+\)', '')}
  • 首先读取全部文件,我还是习惯使用别名进行操作,即​​ls​​,后面跟上通配符+待修改文件的后缀名,就OK了。
  • 其次是采用管道操作​​|​​​,后面跟上逐元素进行操作的循环命令​​foreach​​。
  • 最后就是改名啦,这里依旧使用别名​​ren​​​,采用转义字符​​\​​对正则中的括号进行转义,就可以完成修改啦。

注意事项

上面语句中的括号不能少,就是​​($_.name -replace '\(\d+\)', '')​​这块,由于这里使用的是参数形式的命令,所以要加括号,否则会报错。