我正在尝试使用Powershell重命名批量文件:
file name_FACEBOOK POST
file name_TWITTER POST
file name_FACEBOOK EVENT BANNER
到
FACEBOOK POST - file name
TWITTER POST - file name
FACEBOOK EVENT BANNER - file name
“文件名”可以是任意数量的带空格的单词。 “文件类型”可以是任意数量的带空格的单词。
我目前的代码:
ls | Rename-Item -NewName {$_.name -replace '^(\w+)_(\w+)', '$2-$1'}
但那不起作用......
答案 0 :(得分:0)
这可能是你的正则表达式的一个问题。 \ w匹配字母数字和下划线,但你说你的文件名中可以有空格,所以它不匹配。
ls | Rename-Item -NewName {$_.name -replace '^([^_]+)_(.+)', '$2-$1'}
[^_]
匹配除下划线以外的任何字符。
答案 1 :(得分:0)
我也会去寻找正则表达式替换的乐趣,但是自从@matts1接受了这个,我想找到一个替代方案。
ls | Rename-Item -NewName {"{1} - {0}.{2}" -f $_.Name.Split('_.')}
(.Split()
在任一字符上拆分,而不是两者一起拆分,因此它会生成第一部分,第二部分,扩展的数组,然后字符串将它们格式化为新的顺序)