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

标签 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" '"" "

然后你可以看到第二个 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

如何让它作为参数工作?

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

最佳答案

测试解决方案:

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/

相关文章:

windows - 将分号分隔文件列表从 txt 文件复制到 Windows cmd 中的给定文件夹

windows - 适用于 Windows 的 Emacs 24.3,流浪者字节码 : Couldn't find a proper `ls' command

windows - 使用批处理脚本在 Windows 中添加注册表项,并在数据中添加引号

java - 如何使用运行 JAR 的 Maven Appassembler 创建 .bat 文件?

windows - 如何使用CMD命令查找和删除文件?

Windows自动多用户登录命令行

windows - 如何编写将一个目录复制到另一个目录并替换旧文件的批处理脚本?

c# - 有没有办法通过 C# 命令以管理员身份打开 CMD?

windows - 使用 'for' 循环迭代目录中的所有文件

c - 在 Windows 上将 select() 与 STDIN 一起使用?