单行命令用于打开其他程序(如Git,PowerShell或命令行)中的文件列表

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单行命令用于打开其他程序(如Git,PowerShell或命令行)中的文件列表相关的知识,希望对你有一定的参考价值。

我想从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 -

参考VS Code CLI docs

答案

,(git diff master... --name-only) | % { code $_ }

逗号在开头creates是一个数组,其中包含一个传递给管道的单个元素。所以在foreach中,只有一个迭代将文件名数组传递给代码。

我没有用文件路径中的空格来测试它。

或者,不用推动管道就可以做到

code (git diff signage-theme... --name-only)

另一答案

作为包含空格的文件名的另一个答案的替代方法:

#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从数组中的外部程序收集stdout输出行。

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

例如,在Windows上,如果运行以下命令:

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

code会看到如下命令行:

...code.cmd "file1" "file 2"

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

通过PowerShell的ForEach-Object cmdlet在此处使用管道没有任何好处。

以上是关于单行命令用于打开其他程序(如Git,PowerShell或命令行)中的文件列表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Chocolatey 安装后刷新 PowerShell 会话的环境而无需打开新会话

Git Batch命令(转)

git不是内部命令和可执行程序解决方法

如何用Git将本地项目上传到Github

你如何用 JGit 做相当于“git show tagname”的操作?

高分200!!如何用DOS命令运行程序