我正在尝试使用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.
答案 0 :(得分:1)
对于CMD / C,请参阅“Bash in Git for Windows: Weirdness when running a command with CMD.exe /C with args”
尝试在双引号内使用Unix风格的路径
$ CMD //C "/c/Program Files (x86)/Opera/New folder/a.bat"
(没有&& echo done
)
在Windows 10上使用git版本2.11.0.windows.1进行测试。
注意:对于简单命令,您不需要CMD /C
来执行git bash会话中的bat。在这种情况下,您可以转义空格和括号:
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%"
应该打印批处理文件设置的env变量 然后在git-bash中我希望echo $LIB
在执行命令后不打印任何内容。
echo %LIB%
很棘手,因为CMD会话将使用来自Git的回声,而不是echo
内置的CMD shell命令。
但是chaining multiple command in a CMD
(这里适用于Git bash会话)完成了:
cmd //V //C "C:/path to/vcvarsall.bat&&set myvar"
set myvar
将显示bat脚本为myvar
设置的值
然而,回到bash会话中,echo ${myvar}
将不会显示任何内容。
答案 1 :(得分:0)
另一种简单的方法是导航到包含该文件的目录(使用cd命令),然后运行命令并传递文件名。