我想从VS Code中的一个分支中打开所有更改的文件。
现在我分两个步骤进行操作。
// 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 -
答案 0 :(得分:1)
,(git diff master... --name-only) | % { code $_ }
在creates开头的逗号,该数组具有沿流水线传递的单个元素。因此,在foreach中,只有一次迭代将文件名数组传递给代码。
我尚未在文件路径中使用空格对此进行测试。
或者,您无需做任何事情就可以做到
code (git diff signage-theme... --name-only)
答案 1 :(得分:1)
在文件名包含空格的情况下作为其他答案的替代方法:
#requires -Version 4
$files = @(& git.exe diff master... --name-only).
ForEach{"""$PSItem"""} -join ' '
& code.cmd $files
此解决方案利用了嵌入式引号,cmd
解析器会在不需要时将其删除。
答案 2 :(得分:1)
您可以将git
命令的输出作为自变量 传递给code
:
code (git diff master... --name-only)
PowerShell从外部程序中以 array 收集标准输出输出行。
假设git
命令仅输出文件路径,每个文件路径都在其单独的行上,将该数组传递给另一个外部程序,例如code
自动传递数组的元素为单个,适当引用的参数。
例如,在Windows上,如果您运行以下命令:
code (cmd /c echo file1`& echo "file 2")
code
将看到如下命令行:
...\code.cmd "file1" "file 2"
请注意,(直接)管道到code
并不是一种选择,因为code
不接受文件路径< / em>来自stdin;您可以使用stdin传递(新)文件的内容,但是('Text for new doc' | code -
)。
在此处通过PowerShell的ForEach-Object
cmdlet使用管道没有好处。