PowerShell正则替换+批量修改文件名
程序员文章站
2024-03-24 19:33:28
...
写在前面
最近对于修改文件名有了新的需求,就是批量去掉文件名中的括号以及数字,类似这样:(1)
,但是数字是会随着文件的不同而递增的,这就只能用正则表达式来搞定啦。修改文件名我还是采用了PowerShell,号称Shell中处理字符串速度最快,下面来具体介绍一下操作方法。一些Powershell的函数简介可以看我的另一篇文章:《powershell一行代码批量修改文件名(附命令详解)》。
问题与分析
我先用for
循环生成一些测试文件,方便下面的演示,需要用到PowerShell中的New-Item
方法,代码及结果如下。
for ($i=1; $i -lt 20; $i++){new-item -name $i.txt;}
目标就是去掉文件名中的括号以及内部的数字,下面用正则表达式进行实现。需要注意的是,这里面不再使用.Replace()
方法,而使用字符串处理的-replace
参数,因为只有这个参数支持正则语法。
具体代码及讲解
还是只有一行代码,简洁明了,十分迅速????。
ls *.txt | foreach{ren $_.name ($_.name -replace '\(\d+\)', '')}
- 首先读取全部文件,我还是习惯使用别名进行操作,即
ls
,后面跟上通配符+待修改文件的后缀名,就OK了。 - 其次是采用管道操作
|
,后面跟上逐元素进行操作的循环命令foreach
。 - 最后就是改名啦,这里依旧使用别名
ren
,采用转义字符\
对正则中的括号进行转义,就可以完成修改啦。
注意事项
上面语句中的括号不能少,就是($_.name -replace '\(\d+\)', '')
这块,由于这里使用的是参数形式的命令,所以要加括号,否则会报错。