2014-10-02 82 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 "-.*"}