繁体   English   中英

通过 Git-Bash 使用包含空格的“cmd”执行命令?

[英]Executing Command with "cmd" That Contains Spaces Through Git-Bash?

我正在尝试使用 cmd 使用 git-bash 执行命令。 我需要传递命令才能执行。 问题是我需要将批处理文件的路径传递给命令并且它有空格。 我似乎无法以一种它能够理解的方式将引号传递给“cmd”。

cmd //C "c:\\Program Files (x86)\\another path\\file.bat args && echo done"

这会给我一个错误:

'C:\\Program' is not recognized as an internal or external command, operable program or batch file.

如果我尝试使用单引号,那么它会将文字反斜杠传递给 cmd。

cmd //C '"c:\\Program Files (x86)\\another path\\file.bat" args && echo done'

这会给我同样的错误但显示反斜杠的错误:

'\\"c:\\Program Files (x86)\\another path\\file.bat\\"' is not recognized as an internal or external command, operable program or batch file.

对于 CMD /C,请参阅“ Bash in Git for Windows:使用 CMD.exe /C 和 args 运行命令时的怪异

尝试在双引号内使用 Unix 风格的路径

$ CMD //C "/c/Program Files (x86)/Opera/New folder/a.bat"

(没有&& echo done )

在 Windows 10 上使用 git 版本 2.11.0.windows.1 进行测试。

注意:对于简单的命令,从 git bash 会话执行 bat 不需要CMD /C 在这种情况下,您可以转义空格和括号:

vonc@vonc MINGW64 /c/Users/vonc
$ /c/Program\ Files\ \(x86\)/Test/New\ folder/a.bat

OP 在评论中添加:

我希望环境变量只存在于cmd的一个实例上。 我不希望它在 bash 中实际设置环境变量。
这就是为什么“ && ”是必要的,因为另一个命令将依赖于这些变量。 这是我需要依赖它们的唯一命令。
cmd /C "C:/path to/vcvarsall.bat && echo %LIB%"应该打印批处理文件设置的环境变量。
然后在 git-bash 中,我希望echo $LIB在执行命令后不打印任何内容。

echo %LIB%很棘手,因为 CMD 会话将使用来自 Git 的 echo,而不是echo内置的 CMD shell 命令。
但是CMD链接多个命令(此处适用于 Git bash 会话)是通过以下方式完成的:

cmd //V //C "C:/path to/vcvarsall.bat&&set myvar"

set myvar将显示 bat 脚本为myvar设置的值。
然而,在 bash 会话中, echo ${myvar}不会显示任何内容。

另一种简单的方法是导航到包含该文件的目录(使用 cd 命令),然后运行该命令并传递文件名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM