我正在尝试编写一个简单的脚本来读取文件,找到一个字符串,用另一个字符串替换该字符串,并将所有新文件内容(带有替换的字符串)存储在一个新文件中。这是我正在使用的:
(Get-Content C:\file1.txt) | {$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt
我收到的错误是:“表达式只允许作为管道的第一个元素”
我很确定这是因为冒号“:”字符在我找到的字符串中并用它替换。我尝试用“\”和“`”字符转义冒号字符,但我收到了同样的错误。有谁知道这有什么问题?
感谢您的帮助。
答案 0 :(得分:15)
问题是管道中的第二个元素。
{$_ -replace "this:text", "withthis:text"}
这是一个脚本块(即一段代码)。如果要将scriptblock应用于管道上的所有传入项,可以使用foreach-object
cmdlet,如下所示:
(Get-Content C:\file1.txt) | foreach-object {$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt
@shagun正在使用%
cmdlet的foreach-object
别名,因此代码看起来也是正确的。
答案 1 :(得分:2)
我想这是因为在第一次管道之后你没有处理每个结果。所以正确的一个将是我的意思:
(Get-Content C:\file1.txt) | %{$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt