使用powershell重新排列文件名中的短语

时间:2016-05-13 00:36:56

标签: powershell scripting

我正在尝试使用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'}

但那不起作用......

2 个答案:

答案 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()在任一字符上拆分,而不是两者一起拆分,因此它会生成第一部分,第二部分,扩展的数组,然后字符串将它们格式化为新的顺序)