2

谁能告诉我他们是否认为这个 Powershell 脚本有问题。

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

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

4

3 回答 3

8

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

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

这也使用 -Filter 仅挑选以“.txt”结尾的文件,这比 where 更快。

于 2013-01-26T22:43:53.097 回答
7

-replace 对正则表达式进行操作,您需要转义“。”:

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

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

于 2013-01-26T22:02:16.923 回答
1

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

dir | ? { $_.extension -eq ".txt" } | rename-item -newname { $_.name.replace(".","-") }
于 2013-01-26T22:09:40.110 回答