单行命令打开来自其他程序(如Git、PowerShell或命令行)的文件列表
我想在VS代码中打开分支中所有更改的文件 现在我分两步来做单行命令打开来自其他程序(如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
// 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外部命令已经将其输出作为字符串数组发送,这就是为什么需要一元数组运算符,以便它不会被展开。