基本PowerShell脚本问题:“表达式只允许作为管道的第一个元素”

时间:2014-08-01 10:21:01

标签: powershell scripting

我正在尝试编写一个简单的脚本来读取文件,找到一个字符串,用另一个字符串替换该字符串,并将所有新文件内容(带有替换的字符串)存储在一个新文件中。这是我正在使用的:

(Get-Content C:\file1.txt) | {$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt

我收到的错误是:“表达式只允许作为管道的第一个元素”

我很确定这是因为冒号“:”字符在我找到的字符串中并用它替换。我尝试用“\”和“`”字符转义冒号字符,但我收到了同样的错误。有谁知道这有什么问题?

感谢您的帮助。

2 个答案:

答案 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