用管道替换foreach

时间:2013-01-17 21:18:45

标签: powershell

好吧,说我在目录树中有一堆文本文件,都有相同的名称,我想将它们全部连接成1个文件。

我让它与foreach合作,但我想知道是否有更好的方法来使用pipleline。

有更好的方法吗?

代码:

dir -filter users.txt -recurse | foreach { get-content $_.FullName | add-content .\All.txt }

这很有效,但我觉得如果没有foreach,我应该能够做到这一点。

1 个答案:

答案 0 :(得分:6)

如果您阅读Get-Content的帮助,您会看到-Path接受string []数组,这意味着您可以尝试直接在Get-ChildItem中输出输出。

[22:24:57] PS-ADMIN> get-help Get-Content

NAME
    Get-Content

SYNOPSIS
    Gets the contents of a file.

SYNTAX
    Get-Content [-Path] <String[]> [-Credential <PSCredential>] ......

所以试试这个:

Get-ChildItem -Filter users.txt -Recurse | Get-Content | Set-Content .\all.txt

编辑:实际上:在研究了更多之后,我发现它是-LiteralPath从FileInfo对象获取PSPath属性并将其用作路径。不过,同样的逻辑: - )