我正在教自己使用powershell'并且已经有了一个裁剪器,谷歌/这个网站还没有让我找到解决方案。我正在使用来自不同目录的文件列表编译文本文件,但是我在向文件中添加新数据时遇到了麻烦。
get-childitem $dir -recurse | % {write-output $_.fullname} >$file
创建我的文件,但后来我想从下面附加新记录
get-childitem $dir2 -recurse | % {write-output $_.fullname} >$file
我已经尝试了添加内容和-append,但我无法弄清楚我没做什么才能做到正确。
答案 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
有关可以更好地了解数据流/输出重定向的更多详细信息:
>
和>>
(以及使用n>
和n>&1
的数据流重定向),以及每个PowerShell版本的可用流:About Redirection in PowerShell(或PowerShell中的Get-Help about_redirection
)Tee-Object
cmdlet),一个cmdlet,可作为Out-File
(或powerShell中的Get-Help tee-object
)的更强大版本