好吧,假设我在目录树中有一堆文本文件,它们都具有相同的名称,我想将它们全部连接成一个文件。
我用 foreach 让它工作,但我想知道是否有更好的方法来使用流水线。
有更好的方法吗?
代码:
dir -filter users.txt -recurse | foreach { get-content $_.FullName | add-content .\All.txt }
那行得通,但我觉得我应该能够在没有 foreach 的情况下做到这一点。
最佳答案
如果您阅读Get-Content
的帮助,您会看到-Path
接受字符串[] 数组,这意味着您可以尝试通过管道传输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
属性并将其用作路径。同样的逻辑:-)
关于powershell - 用管道替换 foreach,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388334/