单行命令打开来自其他程序(如Git、PowerShell或命令行)的文件列表

单行命令打开来自其他程序(如Git、PowerShell或命令行)的文件列表,git,powershell,command-line,visual-studio-code,Git,Powershell,Command Line,Visual Studio Code,我想在VS代码中打开分支中所有更改的文件 现在我分两步来做 // copy the file list PS> git diff master... --name-only | clip // paste the file list PS> code file1 file2 file3 ... fileN 如果有的话,我们如何在一条线上做到这一点?我尝试了以下两种方法: PS> git diff master... --name-only | code PS> g

我想在VS代码中打开分支中所有更改的文件

现在我分两步来做

// copy the file list
PS> git diff master... --name-only | clip

// paste the file list
PS> code file1 file2 file3 ... fileN 
如果有的话,我们如何在一条线上做到这一点?我尝试了以下两种方法:

PS> git diff master... --name-only | code 
PS> git diff master... --name-only | code -
参考。

,(git diff master…--仅限名称)|%{code$}

数组开头的逗号包含沿管道传递的单个元素。因此,在foreach中,只有一次迭代将文件名数组传递给代码

我还没有用文件路径中的空白来测试这个

或者,在不把事情推到管道上的情况下,你可以只做


code(git diff看板主题…--仅限名称)

如果文件名包含空格,则作为其他答案的替代选项:

#requires -Version 4
$files = @(& git.exe diff master... --name-only).
    ForEach{"""$PSItem"""} -join ' '
& code.cmd $files

此解决方案使用嵌入引号,
cmd
解析器将在不需要时去掉这些引号。

您可以
git
命令的输出作为参数传递给
code

code (git diff master... --name-only)
PowerShell从阵列中的外部程序收集标准输出行。

假设
git
命令只输出文件路径,每个路径在其自己的行上,将该数组传递给另一个外部程序,例如
code
自动将数组的元素作为单独的、适当引用的参数传递。

例如,在Windows上,如果运行以下操作:

code (cmd /c echo file1`& echo "file 2")
...\code.cmd "file1" "file 2"
code
将看到如下命令行:

code (cmd /c echo file1`& echo "file 2")
...\code.cmd "file1" "file 2"

请注意,(直接)管道到
code
不是一个选项,因为
code
不接受来自stdin的文件路径;但是,您可以使用stdin传递(新)文件的内容(
'Text for new doc'| code-


通过PowerShell的
ForEach对象使用管道没有任何好处
cmdlet此处

这是有用的信息,尽管对于我的用例来说并不实际,它要求代码是一行程序。这很有用,可能就是答案。我要玩玩它。唯一的缺点是必须将git命令用括号括起来。将原始git输出通过管道传输到单个数组中,而不必使用
,()
方法,这将是非常好的。git命令| reduce to single array |%{code$}的一些类似于
的东西会更好,尽管这可能是不切实际的期望。@ShaunLuttin外部命令已经将其输出作为字符串数组发送,这就是为什么需要一元数组运算符,以便它不会被展开。