在Windows命令行上转义字符串

Ale*_*nii 3 windows winapi command-line command-line-arguments command-line-parsing

我正在尝试从命令行将字符串传递给Win32程序,因此它将在不更改的情况下打印.

为什么我必须将
"AAA <BBB@pobox.com>"作为""AAA <BBB@pobox.com>"""

"AAA <BBB@pobox.com>",(包括逗号)为"\" AAA ^ <BBB@pobox.com ^> \","

我发现Windows命令行的转义规则没有一致性

PS我正在尝试生成.cmd文件

更新:

我正在使用简单的C程序进行测试,使用gcc编译,没有其他对象文件链接.如果我用perl替换它,规则保持不变.

我正在尝试创建一个通用的转义算法.它将生成.cmd文件,该文件将使用输出重定向调用perl.目前我有一个问题,如果字符串包含使用反斜杠转义的奇数双引号,则输出重定向不起作用.在http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx的最新评论中描述了同样的问题.

如果我使用""作为"它的转义",它会在空格上分割,因此它将导致2个参数而不是一个.此外,""还有一些工件.

Col*_*ell 7

在Windows中,没有一种方法可以获取命令行并解析它.一般来说,程序通常都是自己处理的.

Raymond Chen最近发表了一篇关于CommandLineToArgvW函数的文章,其中提到了有关引用的各种规则,但它们仅在程序使用该特定函数时才适用.http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx

在Windows中,命令行被无故障地传递给程序(即没有扩展通配符),然后程序需要处理它.编程语言可以提供一些方便,可以进行一些默认的参数解析,这可能会使用像CommandLineToArgvW这样的标准Windows函数,但即使如此,程序也可以选择读取未掺杂的字符串本身,从而跳过这些标准.

这意味着您需要找出自己尝试编写脚本的特定程序的规则,然后再使用它们.