powershell附加到输出

powershell附加到输出,powershell,append,Powershell,Append,我正在“教自己学习powershell”,而且已经有了很大的进步,而google/这个网站并没有让我找到解决方案。我正在编译一个包含来自不同目录的文件列表的文本文件,但在向文件中显示新数据时遇到问题 get-childitem $dir -recurse | % {write-output $_.fullname} >$file Get-ChildItem $dir -recurse | Select-object -ExpandProperty Fullname | Out-File

我正在“教自己学习powershell”,而且已经有了很大的进步,而google/这个网站并没有让我找到解决方案。我正在编译一个包含来自不同目录的文件列表的文本文件,但在向文件中显示新数据时遇到问题

get-childitem $dir -recurse | % {write-output $_.fullname} >$file
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
创建我的文件,但我想从下面添加新记录

get-childitem $dir2 -recurse | % {write-output $_.fullname} >$file
我尝试了添加内容和-append,但我不知道我没有做什么来正确操作。

您可以使用写入文件,添加append参数将附加到文件

get-childitem $dir -recurse | % {write-output $_.fullname} >$file
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
您可以使用写入文件,添加append参数将追加到文件中

get-childitem $dir -recurse | % {write-output $_.fullname} >$file
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
尝试:

(已测试和工作)

>
使其始终附加,每次覆盖一个


或者更改语法以使用

(未经测试)

在这种情况下,变量
$file
必须包含完整路径。比如:
C:\directory\filename.txt
试试:

(已测试和工作)

>
使其始终附加,每次覆盖一个


或者更改语法以使用

(未经测试)

在这种情况下,变量
$file
必须包含完整路径。例如:
C:\directory\filename.txt

简短回答 此处使用的管道可以省去,使用管道将使生活更轻松:

Out-File (Get-ChildItem $dir -Recurse).FullName -FilePath $File
要追加,只需使用
-append
标志:

Out-File (Get-ChildItem $dir2 -Recurse).FullName -FilePath $File -Append
注意:这仅适用于PowerShell v3及以上版本,因为PowerShell v2依赖管道来扩展数组中对象的属性。在这种情况下,最好的方法是在同一个线程上使用类似于proposed的东西

长答案和最佳实践 在另一个线程中,他们在附加文件时遇到了类似的困难。不过,他们也在以一种不必要的方式使用管道(比您在示例中使用的方式要多)

它们的管道使用情况如下所示:

$PathArray | % {$_} | Out-File "C:\SearchString\Output.txt"
现在,
Out文件
又有了一个
-Append
参数。简单地修改他们的代码,让它在最后被标记,就能解决问题

尽管如此,它们的
ForEach Object
语句(
%
符号)在管道中非常无用,也不需要(与您的使用方式非常相似)。这是因为您只使用
ForEach对象
循环来输出对象,而不进行任何修改。这正是管道默认执行的操作,即将每个对象传递给下一个命令

有关管道的更多信息:

如果已在本地运行,则可以使用本地运行
获取有关管道的帮助
以查看信息

与此相反:

$PathArray | % {$_} | Out-File "C:\SearchString\Output.txt" -Append
我们可以这样做:

$PathArray | Out-File "C:\SearchString\Output.txt" -Append
[推荐]该示例还可以同时消除对管道的需求,因为如果不使用管道,则使用管道的效率较低。在没有管道的情况下,或者在管道中每个管道的左侧,可以执行的所有操作都是“过滤左侧”(有关为什么要过滤左侧的详细信息,请参阅以下文章,格式为右侧:):

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

请记住:
获取帮助
,并阅读友好手册(RTFM) 最简单的故障排除方法是签出帮助文档。使用
Get Help
检查您需要的任何内容:参数集、可用参数、示例等。确保运行
Update Help
,以便在本地提供详细的文档。要签出所有内容,请执行以下操作:

Update-Help    
Get-Help Out-File -Full
有关数据流/输出重定向的详细信息,请参见:

  • PowerShell重定向操作符,例如
    >
    (还可以使用
    n>
    n>&1
    重定向数据流),以及每个PowerShell版本的可用流:(或:
    获取有关PowerShell中的\u重定向
    的帮助)
  • cmdlet),一个cmdlet,它充当
    输出文件
    的更健壮版本(或:powerShell中的
    获取帮助对象
简短回答 此处使用的管道可以省去,使用管道将使生活更轻松:

Out-File (Get-ChildItem $dir -Recurse).FullName -FilePath $File
要追加,只需使用
-append
标志:

Out-File (Get-ChildItem $dir2 -Recurse).FullName -FilePath $File -Append
注意:这仅适用于PowerShell v3及以上版本,因为PowerShell v2依赖管道来扩展数组中对象的属性。在这种情况下,最好的方法是在同一个线程上使用类似于proposed的东西

长答案和最佳实践 在另一个线程中,他们在附加文件时遇到了类似的困难。不过,他们也在以一种不必要的方式使用管道(比您在示例中使用的方式要多)

它们的管道使用情况如下所示:

$PathArray | % {$_} | Out-File "C:\SearchString\Output.txt"
现在,
Out文件
又有了一个
-Append
参数。简单地修改他们的代码,让它在最后被标记,就能解决问题

尽管如此,它们的
ForEach Object
语句(
%
符号)在管道中非常无用,也不需要(与您的使用方式非常相似)。这是因为您只使用
ForEach对象
循环来输出对象,而不进行任何修改。这正是管道默认执行的操作,即将每个对象传递给下一个命令

有关管道的更多信息:

如果已在本地运行,则可以使用本地运行
获取有关管道的帮助
以查看信息

与此相反:

$PathArray | % {$_} | Out-File "C:\SearchString\Output.txt" -Append
我们可以这样做:

$PathArray | Out-File "C:\SearchString\Output.txt" -Append
[推荐]该示例还可以同时消除对管道的需求,因为如果不使用管道,则使用管道的效率较低。在没有管道的情况下尽一切可能,