Powershell取代时期

时间:2013-01-26 21:57:07

标签: powershell powershell-v2.0

任何人都可以告诉我他们是否认为这个Powershell脚本有问题。

Dir | 
where {$_.extension -eq ".txt"} | 
Rename-Item –NewName { $_.name –replace “.“,”-” }

对于当前目录中的每个文本文件,我试图用连字符替换文件名中的所有句点。提前谢谢。

3 个答案:

答案 0 :(得分:8)

正如其他人所说,-replace使用正则表达式(而“。”是正则表达式中的特殊字符)。但是,他们的解决方案是忘记了文件扩展,他们正在实际删除它。恩。 “test.txt”变为“test-txt”(无扩展名)。更好的解决方案是:

dir -Filter *.txt | Rename-Item -NewName { $_.BaseName.replace(".","-") + $_.Extension }

这也使用-Filter只挑选以“.txt”结尾的文件,这比在哪里比较快。

答案 1 :(得分:5)

-replace在正则表达式上运行,你需要转义'。':

rename-item -NewName { $_.Name -replace '\.', '-' }

否则你最终会得到'----'名字......

答案 2 :(得分:1)

powershell中文件对象的name属性是string类型 这意味着,您也可以使用静态字符串方法replace,如下所示,并不关心正则表达式的保留字符:

dir | ? { $_.extension -eq ".txt" } | rename-item -newname { $_.name.replace(".","-") }