转义调用msysgit sh.exe的批处理文件中的空格?

时间:2015-05-08 17:43:43

标签: windows batch-file cmd escaping msysgit

我有 run-sh.bat尝试将命令传递给sh.exe

rem My Batch File
cmd /c " "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "%1" "

第一个参数作为命令传入。一个简单的工作示例:

run-sh.bat "' echo Hello '"
...
Hello

但是,如果命令有一个带空格的路径,那么路径会在第一个空格处被切断:

run-sh.bat "' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '"
...
C:\Windows\Path\That

现在,如果我只是将整个命令直接粘贴到(而不是使用参数):

rem My Batch File
cmd /c " "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c "%1" "
cmd /c " "C:\Program Files (x86)\Git\bin\sh.exe" --login -i -c ""' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '"" "

然后你可以看到,对于第二个回声,路径是正确的:

run-sh.bat "' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '"
...
C:\Windows\Path\That
C:\Windows\Path\That Contains\Some Spaces\In\It

如何将其作为参数使用?

我应该修改吗?或者更改我在命令行格式化参数的方式?

1 个答案:

答案 0 :(得分:0)

经过测试的解决方案:

Using CMD:

  rem My Batch File
  CMD /c ""%programfiles(x86)%\Git\bin\sh.exe" --login -i -c '%*'"

You don´t have to use CMD /C though. You can run it directly to avoid extra quotes:

  rem My Batch File
  "%programfiles(x86)%\Git\bin\sh.exe" --login -i -c '%*'

然后当你调用它时,只在路径上使用引号:

run-sh.bat echo "C:\Windows\Path\That Contains\Some Spaces\In\It"