powershell - 用管道替换 foreach

标签 powershell

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

我用 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/

相关文章:

powershell - powershell-连接N个文本文件,并在每行前添加文件名

powershell - Azure Add-AzureDisk 不工作

node.js - 如何更改 Node 模块 "say"的音频输出设备

azure - 有没有办法使用 powershell 升级 azure 应用程序服务计划?

.net - 一元运算符 '--' 后缺少表达式

powershell - Powershell此处字符串换行符不适用于输出文件

powershell - 如何从 PowerShell 脚本中获取退出代码

powershell - 如何在 PowerShell 中连接值?

excel - Powershell脚本将txt转换为xlsx

powershell - 如何将2个错误输出合并为一个