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

Batch file 批处理文件中调用msysgit sh.exe的转义空间?,batch-file,msysgit,windows,cmd,escaping,Batch File,Msysgit,Windows,Cmd,Escaping,我有一个run-sh.bat,它试图将命令传递给以下对象的sh.exe: 第一个参数作为命令传入。一个简单的工作示例: run-sh.bat "' echo Hello '" ... Hello 但是,如果命令的路径带有空格,则该路径将在第一个空格处截断: run-sh.bat "' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '" ... C:\Windows\Path\That 现在,如果我只是将整个命令直接粘贴到中(而不

我有一个
run-sh.bat
,它试图将命令传递给以下对象的
sh.exe

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

run-sh.bat "' echo Hello '"
...
Hello
但是,如果命令的路径带有空格,则该路径将在第一个空格处截断:

run-sh.bat "' echo "C:\Windows\Path\That Contains\Some Spaces\In\It" '"
...
C:\Windows\Path\That
现在,如果我只是将整个命令直接粘贴到中(而不是使用参数):

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

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
如何使其作为参数工作

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

测试解决方案:

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"

尝试取消引用该参数,然后再次引用-
“%~1”
@npocmaka我不确定您的意思?您能详细说明一下吗?
%~1
-表示第一个参数没有引号(如果有)。请重新设置引号,以确保它将正确传递给下一个脚本。如果它已经有引号(带有
%1”
),您将有额外的引号对,这将导致问题。
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"