2011-11-22 75 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