2014-10-02 85 views
0

我想使用正則表達式重命名幾個文件。獲取正則表達式在powershell腳本中工作

ck1823000-23.dat 
ck1293834-67.dat 
lo1230324-99.dat 
pk1232131-34.dat 
... 

我想刪除-XX 所以結果會是這樣:

ck1823000.dat 
ck1293834.dat 
lo1230324.dat 
pk1232131.dat 
... 

我想出了這個正則表達式:

(?:.*?)([-\\s].*?).dat 

但我得到這個錯誤:

Rename-Item : The input to the script block for parameter 'NewName' failed. The regular expression pattern is not valid

當我運行此命令:

Get-ChildItem . -file -Filter "*.dat" | Rename-Item -newname { $_.name -replace "\(?:.*?)([-\\s].*?).dat\", ""} 

回答

1

使用正則表達式下面,然後用一個空字符串替換匹配的字符。

-[^.-]*(?=\\.dat) 

DEMO

Get-ChildItem . -file -Filter "*.dat" | Rename-Item -newname { $_.name -replace "-[^.-]*(?=\\.dat)", ""} 
+0

感謝另一種選擇!很棒。所以我想我不能使用組匹配 – Cornwell 2014-10-02 09:11:02

+2

我認爲你可以。 REgex:'^(。*?)([ - \\ s]。*?)(\\。dat)$'replacemet string:'$ 1 $ 3' DEmo http://regex101.com/r/qM2pT8/2 – 2014-10-02 09:16:11

1

您可以使用basename代替name財產

Get-ChildItem . -file -Filter "*.dat" | 
    Rename-Item -newname { $_.basename -replace "-.*"}