我在PowerShell脚本中进行了大量的字符串替换。
foreach ($file in $foo) {
$outfile = $outputpath + $file
$content = Get-Content ($file.Fullname) -replace 'foo','bar'
Set-Content -path $outfile -Force -Value $content
}
我已经验证(通过$outfile
和$content
的控制台记录,我在上面的代码中没有显示)正在选择正确的文件,-replace
是准确地更新内容,正在创建$outfile
。但是,每个输出文件都是一个0字节的文件。 Set-Content
行似乎没有将数据写入文件。我已尝试将Set-Content
加到Out-File
,但这只是给了我一个错误。
当我用Set-Content
替换Out-File
时,即使我可以将Out-File : A parameter cannot be found that matches parameter name 'path'.
输出到控制台并看到它是有效路径,我也会收到运行时错误$outfile
。< / p>
是否需要执行额外的步骤(如close-File或save-file命令)或不同的顺序,我需要管道处理以使$content
写入{{1} }}?我错过了哪个组件?
答案 0 :(得分:4)
Out-File
cmdlet没有-Path
参数,但它有一个-FilePath
参数。以下是如何使用它的示例:
Out-File -FilePath test.txt -InputObject 'Hello' -Encoding ascii -Append;
您还需要将Get-Content
命令括在括号中,因为它没有名为-replace
的参数。
(Get-Content -Path $file.Fullname) -replace 'foo','bar';
我还建议将-Raw
参数添加到Get-Content
,以确保您只处理单行文本,而不是字符串数组(一个{{ 1}}文本文件中的每行。)
[String]
没有足够的信息来完全理解正在发生的事情,但这里有一个我认为你想要做的事情的充实例子:
(Get-Content -Path $file.Fullname -Raw) -replace 'foo','bar';