我有一个批处理脚本,用一些参数调用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')
用户使用单引号或双引号
它与双引号一起工作,因为它们在批处理脚本级别被吃掉,但当它们使用“(单引号)时,它被留下并传递给我的程序
我的命令是多平台的,在unix上,单引号和双引号都是特殊字符
我希望避免在我的_cmd程序中根据平台做一些特定的事情
在shell脚本和批处理脚本中是否有相同的行为。 例如,如果存在单引号,批处理脚本可以吃单引号
告诉我对你来说什么是最好的解决方案
非常感谢
在Windows上,参数处理(以及引用、全局搜索等规则)由应用程序负责。如果您的代码除了使用包含完整引号的所有参数的单个字符串之外,还使用了其他任何东西,请理解这是因为您的开发工具已经对
GetCommandLine
的结果进行了一些预处理。因此,对于不同的报价处理,您需要查看您的开发工具,而不是操作系统。最好的选择通常是自己调用GetCommandLine
,并使用您选择的库来处理它,而不是编译器提供的库也就是说,WindowsShell团队提供了其中一个库。见^{} 。但这不是核心操作系统的一部分,使用它是完全可选的
此外,批处理处理器在进行变量替换时考虑引用。这种行为很难改变或禁用,但听起来并不是你问题的根源
为什么不把引号改成双引号呢
相关问题 更多 >
编程相关推荐