我打算从 cmd shell 运行以下命令
git clone $(Get-Clipboard)
从资源管理器中的上下文菜单。
我该如何从命令 shell 运行这些程序?不起作用的是
PowerShell -Command "git clone $(Get-Clipboard)"
它给fatal: Too many arguments.
我怎样才能正确地退出 Get-Clipboard 命令?
答案1
我引用了官方网站的内容(https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_powershell_exe?view=powershell-5.1) 大致可以写成这样:
在 cmd.exe 中,没有脚本块(或 ScriptBlock 类型)这样的东西,因此传递给 Command 的值始终是字符串。您可以在字符串中编写脚本块,但它不会执行,而是表现得像您在典型的 PowerShell 提示符下键入它一样,将脚本块的内容打印出来给您。
传递给 Command 的字符串仍作为 PowerShell 代码执行,因此从 cmd.exe 运行时通常不需要脚本块花括号。要执行在字符串内定义的内联脚本块,可以使用调用运算符 &:
powershell -command "& {git clone $(Get-Clipboard)} %*"
答案2
文字脚本块
用一个文字脚本块将允许您从 cmd.exe 运行 PowerShell 命令:
powershell -command "& {git clone $(Get-Clipboard)} %*"
注册表示例
要从目录运行此程序,请右键单击将其添加到 Windows 注册表
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Directory\shell\git-clone]
@="Clone here"
[HKEY_CLASSES_ROOT\Directory\shell\git-clone\command]
@="Powershell -NoProfile -WindowStyle Hidden -Command "Set-Location -LiteralPath '%V' ; git clone $(Get-Clipboard)")\""
命令行参数-WindowStyle Hidden
阻止命令窗口可见。-NoProfile
选项阻止加载 PowerShell 配置文件加快这一进程。
(感谢 sionta)