c++ - 如何以与 VBScript 相同的方式解析命令行

标签 c++ windows winapi visual-c++

我有一个简单的 C++ 程序,列出了它获得的参数:

#include <iostream>

int main(int argc, char* argv[]) {
    for (int i = 1; i < argc; i++) {
        std::cout << argv[i] << std::endl;
    }
    return 0;
}

我只是在测试/解决这个问题,但最终目的是让它接受一些文件和目录的名称。

所以我将这些参数传递给它:

"\\server\directory\file.ext" "C:\trailing\backslash\" "file.txt"

但这是打印的内容:

\\server\directory\file.ext 
C:\trailing\backslash" file.txt

即第二个参数的尾部斜线让它认为结束引号被转义了。

我在 VS2017 的属性页中设置参数,但在以下情况下我得到相同的输出:

  • 我从 PowerShell 调用 exe。
  • 我允许外部工具通过我的 它构建的 exe 参数(这将是最终的方式 用过)。

如何让我的程序理解带有尾部斜杠的引用路径是一个参数?

编辑 this article 的第 4 节准确描述了我的问题。基本上,我想让我的 C++ 程序以与批处理文件或 VBScript 相同的方式解释参数。 我无法更改参数进入我的程序的方式

编辑 我将简化问题:

上面的 C++ 程序的行为如下: The C++ program above behaves like this

我希望它表现得像这样: I want it to behave like this

为了实现这一点,我必须对程序或编译器做些什么?

最佳答案

您必须用另一个反斜杠保护结尾的反斜杠,否则反斜杠将被视为后续双引号的转义字符。 看这个blog post雷蒙德·陈 (Raymond Chen) 解释了这种行为的理由。 以下是相关部分的引述:

  • A string of backslashes not followed by a quotation mark has no special meaning.
  • An even number of backslashes followed by a quotation mark is treated as pairs of protected backslashes, followed by a word terminator.
  • An odd number of backslashes followed by a quotation mark is treated as pairs of protected backslashes, followed by a protected quotation mark.

关于c++ - 如何以与 VBScript 相同的方式解析命令行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266836/

相关文章:

c++ - TransparentBlt 结果不正确

c++ - 在二进制表示法中,小数点 "."之后的数字是什么意思?

c++ - 使用 Windows 7 在 VS 中取消引用 null

c++ - 如何在 C++ 中将模板类声明为友元

windows - 什么是适用于 Windows 的免费 Perl IDE?

c - 所有者绘制选项卡控件 - 选项卡项目的文本

winapi - 了解在 COM 对象上查询哪些接口(interface)

c++ - 在遍历 vector 时一遍又一遍地比较 vector 内部的一组两个整数

c++ - 使用 OpenCV 减去流离失所的掩码

C 尝试在 header 中查找\r\n\r\n