powershell - PowerShell 中的 xargs 相当于什么?

标签 powershell xargs

POSIX-defined xargs command 获取从标准输入接收的所有项目,并将它们作为命令行参数传递给它在自己的命令行上接收的命令。例如:grep -rn "String" | xargs rm .

PowerShell 中的等效项是什么?

以下问题都问这个:

但是没有正确答案,因为所有答案要么使用 ForEach-Object ,它将一次处理一个项目(例如 xargs -n1 ),从而获得给定示例的所需结果,或者将中间结果存储在变量中,这会冒犯我的功能命令行。

最佳答案

我发现有两种方法。第一个可能是更惯用的 PowerShell,第二个更符合 xargs 基于管道的精神。

举个例子,假设我们想要将所有猫的图片传递给 myapp.exe

方法#1:命令替换

您可以通过将管道嵌入到命令字符串中来执行类似于在 sh 中使用 $(命令替换) 的操作:

&"myapp.exe" @(Get-ChildItem -Recurse -Filter *.jpg | Another-Step)

@(...) 根据其内部的命令创建一个数组,PowerShell 会自动将传递给 & 的数组扩展为单独的命令行参数。

但是,这并不能真正回答问题,因为只有当您可以控制要传递到的命令时它才会起作用,但情况可能并非如此。

方法#2:真实管道

您还可以通过使用子表达式来传递对象、将它们收集到数组中,然后将该数组传递给最终命令来构造“双管道”。

,@(Get-ChildItem -Recurse -Filter *.jpg | Another-Step) | %{&"myapp.exe" $_}

像以前一样,@(...) 将项目收集到一个数组中,然后将该数组通过管道传输到使用 % (ForEach-Object)。通常,这会单独循环遍历每个项目,因为 PowerShell 在通过管道传输时会自动展平数组,但可以通过在前面添加 , 运算符来避免这种情况。然后像平常一样使用 $_ 特殊变量来嵌入传递的数组。

所以关键是将要收集的管道包装在 ,@(...) 中,然后通过管道将其传输到 %{...} 中的内容>.

关于powershell - PowerShell 中的 xargs 相当于什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36428949/

相关文章:

Redis 批量删除键会去除键名中的斜杠

powershell - 在 Powershell 中使用 Import-CSV,忽略注释行

PowerShell $PSVersionTable

powershell - 以提升的权限执行远程32位PSSession

linux - 如何将 -I 和 -n 与 xargs 结合起来?

linux - 使用带有特殊字符的 xargs

linux - 使用curl插入延迟以取消缩短url

linux - 当文件名包含空格时 xargs 失败

windows - 在 Windows 上的 Scala 代码中运行 shell 命令似乎需要命令的完整绝对路径

powershell - 使用powershell获取注册表项中特定字符串值的值