我有一个 batch-file run-sh.bat
试图将命令传递给 msysgit 的 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
现在,如果我直接将整个命令粘贴到 batch-file(而不是使用参数):
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" '"" "
然后你可以看到第二个 echo 的路径是正确的:
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
如何让它作为参数工作?
我应该修改 batch-file 吗?或者更改我在命令行设置参数格式的方式?
最佳答案
测试解决方案:
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"
关于windows - 调用 msysgit sh.exe 的批处理文件中的转义空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30129779/