【发布时间】:2012-05-25 01:57:28
【问题描述】:
我有一个批处理脚本,它调用带有一些参数的 exe。
目前我正在将参数传递给我的 exe:
$>my_cmd.exe %*
my_cmd.exe 程序的选项之一采用可以包含空格的参数
$>my_cmd.bat --req "in: lava" (OK my prog receives in: lava)
$>my_cmd.bat --req 'in: lava' (NOK my program receives 'in: lava')
用户无所谓地使用单引号或双引号。
它适用于双引号,因为它们在批处理脚本级别被吃掉,但是当它们使用 '(单引号)时,它被留下并传递给我的程序。
my_cmd 是多平台的,在 unix 上,单引号和双引号都是特殊字符。
我希望避免在 my_cmd 程序中根据平台执行特定操作。
有没有办法在 shell 脚本和批处理脚本中具有相同的行为。 例如,如果存在,批处理脚本可以吃单引号?
告诉我什么是最适合你的解决方案。
非常感谢
【问题讨论】:
-
我对这类问题的解决方案是使用 Windows 和 Unix 中存在的东西(而不是试图让 2 个不同的解释器表现相同)。例如:Perl 或 Ruby。或者切换到 Cygwin 并在两边都使用 Bash。实际上,这就是我刚开始接触 Perl 编程的方式。
-
这是我在使用 Python 时所做的,但我仍然需要将参数传递给 Python 程序。 Problem is that on Windows when the option is --req 'in: lava' I get on the python side 'in: lava' as on Linux I get in:lava.所以我需要欺骗我的解析类来处理单引号,我对此并不满意。
-
是的,Windows 中的报价处理很麻烦。试试“cmd /?”并仔细阅读帮助文本。 /s 开关可能会有所帮助。
-
... 或不... 我无法让您的示例起作用。到目前为止我找到的最好的参考是[here]。
-
感谢您的参考。你是什么意思,你不能让我的例子起作用?
标签: windows batch-file