单行命令用于打开其他程序(如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 -
,(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 会话的环境而无需打开新会话