2011-11-22 82 views
3

所以我有一组文件具有以下文件名:用正则表达式批量重命名PowerShell?想不通的表达

52 39 118 070 13200 5480.txt
83 39 010 392 01000 9970.txt
37 39 880 163 17802 0473.txt

我想他们重命名为类似:

2012文件说明(52-39-118-070-13200-5480).TXT
2012文件说明(83-39 -010-392-01000-9970).txt
但是,我找不出相应的正则表达式是什么,以及如何将它编码到PowerShell中。我看到大量的例子来删除空格或下划线,但没有添加到字符串。

请注意,“2012文件描述”对于所有正在重命名的文件都是不变的。我想要更改的唯一方法是将原始文件名移动到括号中,并将空格更改为破折号。

谢谢。

+3

如果你所做的只是在每个前面添加一个常量短语,将原始名称包装在圆括号中,并且都具有'.txt'扩展名,那么普通的旧字符串连接将比正则表达式效果好得多更容易找出如何做)。 –

回答

2
"52 39 118 070 13200 5480.txt" -replace "(.*)(\.txt)",'2012 File Description ($1)$2' 

给出:

2012文件说明(52 39 118 070 13200 5480)的.txt

重要信息:替换字符串使用单引号,因为美元符号 “$” 字符需要如果它出现在用双引号括起来的字符串中,则会被转义。 或者我可以这样写:

"52 39 118 070 13200 5480.txt" -replace "(.*)(\.txt)","2012 File Description (`$1)`$2" 
+0

谢谢你jon Z.完美的工作! 那就是说,我怎样才能将空格改为破折号? ls | %{ren $ _ $($ _。name -replace'\ s',' - ')} 我能够将其从另一个响应中去掉并修改它。但是我怎么能把这个功能嵌入到你描述的那个中?与此同时,我会先运行那个,然后是你的。 – toolshed

+0

(“52 39 118 070 13200 5480.txt”-replace“(。*)(\ .txt)”,'2012 File Description($ 1)$ 2')-replace“\ s”,'_' –

+0

这将替换空格之后。你最终得到2012_File_Description_(52_39_118_070_13200_5480).txt。 – toolshed

1

你并不需要这样的正则表达式。正如Ken在评论中所说的,您可以使用串联(这在Powershell中非常简单)。

喜欢的东西:

gci Y:\MyFolder -filter '*.txt' | % {rename-item -path $_.fullname -newname "2012 File Description`($($_.basename)`).txt" 
+0

有趣。我不知道这个,但我认为这个正则表达式仍然会有比这更广泛的应用,不是吗? 虽然我确实有一个问题,为什么你有第一个$之前($ _?我已经看到,无处不在,我不明白,如果我试图把它拿出来,我得到相同的结果 – toolshed

+0

双引号字符串中的'$'指示powershell将后面的内容解释为一个变量或表达式,在括起来的字符串中返回属性之前需要使用它 – JNK

+0

因此,当用“ls |%{ren $ _ $($ _。name)为什么没有它会工作?如果我没有第一个$,字符串,会返回什么?我假设rename命令正在接受变量中包含的任何内容$ _,然后$ _。name会删除扩展名前面的名字,之后你可以进一步修改或者匹配输出,但是我没有理解为什么它和$都是一样的。我是否添加换行符?它在FAQ中说过这是一个回报和两个空间...不工作。 =/ – toolshed

7

你可以用一行代码(管道直接重命名,编号)做到这一点,但是为了简单起见,我用了Foreach-Object的cmdlet:

Get-ChildItem -Filter *.txt | Foreach-Object{ 
    $NewName = '2012 File Description ({0}){1}' -f ($_.BaseName -replace '\s','-'),$_.Extension 
    Rename-Item -Path $_.FullName -NewName $NewName 
} 
+1

要处理具有'['']'括号的文件名,而不是'Rename-Item -Path',使用'Rename-Item -LiteralPath'。否则Rename-Item找不到$ _。FullName – subsci