[英]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.