1

我有一个批处理脚本,它调用带有一些参数的 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 脚本和批处理脚本中具有相同的行为。例如,如果存在,批处理脚本可以吃单引号吗?

告诉我什么是最适合您的解决方案。

非常感谢

4

2 回答 2

1

在 Windows 上,参数处理(以及引用、通配符等的规则)是应用程序的责任。如果您的代码使用除包含完整引号的所有参数的单个字符串之外的任何内容,请了解这是因为您的开发工具对GetCommandLine. 因此,对于不同的报价处理,您需要查看您的开发工具,而不是操作系统。最好的选择通常是调用GetCommandLine您自己并使用您选择的库来处理它,而不是编译器提供的库。

也就是说,Windows shell 团队提供了其中一个库。见CommandLineToArgvW。但这不是核心操作系统的一部分,使用它是完全可选的。

此外,批处理器在进行变量替换时确实会考虑引号。这种行为很难改变或禁用,但听起来不像是你问题的根源。

于 2012-05-24T17:57:28.827 回答
0

为什么不把引号改成双引号?

set args=%*
my_cmd.exe %args:'="%
于 2012-05-24T17:25:53.470 回答