如何使用Powershell将Set-Content写入文件?

时间:2013-12-26 18:34:20

标签: powershell file-io

我在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} }}?我错过了哪个组件?

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';