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

时间:2017-01-29 05:06:53

标签: windows cmd 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.

2 个答案:

答案 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命令),然后运行命令并传递文件名。