如何将多个结果传递到单个命令中

时间:2016-08-23 20:29:47

标签: powershell

我有以下渠道:

dir -recurse *.* | sls -pattern "matching_pattern" | select -unique path

这给了我这样的输出:

Path
----
D:\code\a.txt
D:\code\b.txt

我希望它调用命令gvim a.txt b.txt

我该怎么做?

2 个答案:

答案 0 :(得分:1)

使用Where-Object代替Select-String来过滤文件,展开FullName(或Name)属性,以便获得路径或文件名数组,以及{ {3}}在调用gvim

$files = Get-ChildItem -Recurse *.* |
         Where-Object { (Get-Content $_.FullName) -match "matching_pattern" } |
         Select-Object -Unique -Expand FullName

& gvim @files

FullName替换为Name语句中的Select-Object,以获取没有路径的文件名。

如果你想坚持使用Select-String,那么方法就会类似:

$files = Get-ChildItem -Recurse *.* |
         Select-String -Pattern "matching_pattern" |
         Select-Object -Unique -Expand Path

& gvim @files

Path替换为Filename语句中的Select-Object,以获取没有路径的文件名。

答案 1 :(得分:0)

您可以通过索引访问这两个结果:

$result = dir -recurse *.* | sls -pattern "matching_pattern" | select -unique path
gvim $result[0].FullName $result[1].FullName