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

Jay*_*ken 8 powershell scripting

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

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

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

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

谢谢您的帮助.

Mik*_*ard 15

问题是管道中的第二个元素.

{$_ -replace "this:text", "withthis:text"}
Run Code Online (Sandbox Code Playgroud)

这是一个scriptblock(即一段代码).如果要将scriptblock应用于管道上的所有传入项,可以使用foreach-objectcmdlet,如下所示:

(Get-Content C:\file1.txt) | foreach-object {$_ -replace "this:text", "withthis:text"} | Set-Content C:\file2.txt
Run Code Online (Sandbox Code Playgroud)

@shagun正在使用cmdlet 的%别名foreach-object,因此代码看起来也是正确的.

  • 仅供参考:如果您有自己的管道就绪的脚本块(例如`{process {$ _*2}}`),您可以使用调用运算符(`&`):`1,2,3 | &{process {$ _*2}}` (2认同)