powershell附加到输出

时间:2015-04-10 12:58:35

标签: powershell append

我正在教自己使用powershell'并且已经有了一个裁剪器,谷歌/这个网站还没有让我找到解决方案。我正在使用来自不同目录的文件列表编译文本文件,但是我在向文件中添加新数据时遇到了麻烦。

get-childitem $dir -recurse | % {write-output $_.fullname} >$file

创建我的文件,但后来我想从下面附加新记录

get-childitem $dir2 -recurse | % {write-output $_.fullname} >$file

我已经尝试了添加内容和-append,但我无法弄清楚我没做什么才能做到正确。

3 个答案:

答案 0 :(得分:4)

尝试:

get-childitem $dir -recurse | % {write-output $_.fullname} >> $file

(经过测试和工作)

>>使其始终追加,每次都会覆盖一个>

或者更改语法以使用Out-File

get-childitem $dir -recurse | % {write-output $_.fullname} | out-file -filepath $file -Append

(未测试的)

在这种情况下,变量$file必须保持完整路径。喜欢:C:\directory\filename.txt

答案 1 :(得分:1)

您可以使用Out-File写入文件,添加append参数将附加到文件中。

Get-ChildItem $dir -recurse | Select-object -ExpandProperty Fullname | Out-File -FilePath $file
Get-ChildItem $dir2 -recurse | Select-object -ExpandProperty Fullname | Out-File -FilePath $file -Append

答案 2 :(得分:0)

简短回答

这里使用的管道可以省去,Out-File的使用将使生活变得轻松:

Out-File (Get-ChildItem $dir -Recurse).FullName -FilePath $File

要追加,只需使用-Append标志:

Out-File (Get-ChildItem $dir2 -Recurse).FullName -FilePath $File -Append
  

注意:这仅在 PowerShell v3 及更高版本中有效,因为 PowerShell v2 依靠管道扩展数组中对象的属性。在这种情况下,最好的方法是在同一线程上使用更像@david-martin的东西。

长答案和最佳实践

在另一个线程Script to Append The File中,他们在附加文件方面遇到了类似的困难。但是,他们也以不必要的方式使用管道(比示例中使用的管道还要多)。

他们的管道用法如下:

$PathArray | % {$_} | Out-File "C:\SearchString\Output.txt"

再次,Out-File有一个-Append参数。只需修改他们的代码以将其标记在最后即可解决问题。

尽管如此,它们的ForEach-Object语句(%符号)在管道中几乎没有用,并且不需要(非常相似于您的用法)。这是因为您仅使用ForEach-Object循环来输出对象而没有任何修改。这正是管道默认情况下所做的,即将每个对象传递给下一个命令。

  

有关管道的更多信息:About Pipelines

     

如果Update-Help已在本地运行,则可以使用Get-Help在本地运行Get-Help about_pipelines来查看信息。

代替此:

$PathArray | % {$_} | Out-File "C:\SearchString\Output.txt" -Append

我们可以这样做:

$PathArray | Out-File "C:\SearchString\Output.txt" -Append

[推荐] 该示例还可以消除对所有管道的需求,因为如果没有管道,使用管道效率较低。在没有管道或管道中每个管道左侧的情况下,可能要做的所有事情就是“向左过滤” (请参阅以下文章,详细了解为什么应该向左过滤 ,格式正确Filtering Command Output in PowerShell):

Out-File -InputObject $PathArray -FilePath "C:\SearchString\Output.txt" -Append
  

注意:在上述情况下,仅当文件已经存在并且正在扩展时才需要-Append

记住:Get-Help,并阅读友好手册(RTFM)

最简单的故障排除方法是查看帮助文档。使用Get-Help来检查所需的内容:参数集,可用参数,示例等。请确保运行Update-Help以使详细文档在本地可用。要检查所有内容:

Update-Help    
Get-Help Out-File -Full

有关可以更好地了解数据流/输出重定向的更多详细信息:

  • PowerShell 重定向运算符,例如>>>(以及使用n>n>&1的数据流重定向),以及每个PowerShell版本的可用流:About Redirection in PowerShell(或PowerShell中的Get-Help about_redirection
  • Tee-Object cmdlet),一个cmdlet,可作为Out-File(或powerShell中的Get-Help tee-object)的更强大版本