从sh或bash脚本中运行/调用Windows批处理脚本

7
我是一个有用的助手,可以翻译文本。
我有一个 sh/bash 脚本,需要调用一个带参数的批处理文件(参数是文件名,并以 DOS/Windows 格式给出)。
基本上我有:
script.sh
#!/bin/sh
declare var1=$1
declare var2=$2
dosomething var1 var2
...
<invoke batch script> var1 var2
...
dosomethingelse

我正在使用 msysgit 上的 shell,版本为 GNU bash,version 3.1.0(3)-release (i686-pc-msys)
问题是当我从脚本运行以下命令时:$COMSPEC /c batchfile param1 param2,要么会得到一个看起来像 bash 的“空提示符”,但控制台上不会显示任何命令结果,要么 cmd.exe 启动,但不执行脚本。
我已经尝试将参数用引号括起来传递给 bash,如下所示:
$COMSPEC /c \"batchfile param1 param2\"
$COMSPEC /c \"\"batchfile param1 param2\"\"
$COMSPEC /c \"\"batchfile \"param1\" \"param2\"\"\"

但是我没有得到任何结果。

你是在Unix脚本中调用Windows批处理脚本还是相反?我可以通过shell脚本调用批处理脚本。 - Raghuram
我正在从Bash调用Windows批处理。 - Bogdan Maxim
1个回答

12
似乎我需要在cmd参数中转义空格:

似乎我需要在cmd参数中转义空格:

$COMSPEC \/c batch-file\ \"$var1\"\ \"$var2\"
或者
$COMSPEC /c batch-file\ \"$var1\"\ \"$var2\"

我不确定是否需要转义/c中的/,但是无论如何转义都可以正常工作。


1
感谢您的记录!我甚至在找到 /c 选项时都遇到了困难,我甚至不需要参数,只知道如何从 bash 中启动脚本。谢谢! - Prof. Falken

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接