[英]escaping string on Windows command line
我正在尝试从命令行将字符串传递给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个参数而不是一个。此外,“”还有一些工件。
在Windows中,没有一种方法可以获取命令行并解析它。 一般来说,程序通常都是自己处理的。
最近Raymond Chen发表了一篇关于CommandLineToArgvW
函数的文章,其中提到了有关引用的各种规则,但它们仅在程序使用该特定函数时才适用。 http://blogs.msdn.com/b/oldnewthing/archive/2010/09/17/10063629.aspx
在Windows中,命令行被无故障地传递给程序(即没有扩展通配符),然后程序需要处理它。 编程语言可以提供一些方便,可以进行一些默认的参数解析,这可能会使用像CommandLineToArgvW这样的标准Windows函数,但即使如此,程序也可以选择读取未掺杂的字符串本身,从而跳过这些标准。
这意味着您需要找出自己尝试编写脚本的特定程序的规则,然后再使用它们。
我刚刚尝试将这些参数作为我自己的程序中的一个,并且两个版本(带或不带逗号)都可以通过两种方式进行转义(使用"""
或\\"
来转义引号)。 我可以看到<
和>
需要在第二个版本中使用^
进行转义的唯一原因是,由于转发方式不同,命令行在将它们传递给应用程序之前将其视为I / O重定向字符串引号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.