如何以与VBScript相同的方式解析命令行 < >我有一个简单的C++程序,列出了它得到的参数: #include <iostream> int main(int argc, char* argv[]) { for (int i = 1; i < argc; i++) { std::cout << argv[i] << std::endl; } return 0; }

如何以与VBScript相同的方式解析命令行 < >我有一个简单的C++程序,列出了它得到的参数: #include <iostream> int main(int argc, char* argv[]) { for (int i = 1; i < argc; i++) { std::cout << argv[i] << std::endl; } return 0; },c++,windows,winapi,visual-c++,C++,Windows,Winapi,Visual C++,但这是印刷品: \\server\directory\file.ext C:\trailing\backslash" file.txt i、 e.第二个参数的尾随斜杠使其认为结束引号已转义 我在VS2017的属性页中设置参数,但在以下情况下得到相同的输出: 我从PowerShell调用exe 我允许外部工具通过我的 它已经构建的exe参数(这将是最终的结果) 使用) 如何让我的程序理解带尾随斜杠的引用路径是一个参数 编辑 第4节正好描述了我的问题。基本上,我想让我的C++程序以批处理文件

但这是印刷品:

\\server\directory\file.ext 
C:\trailing\backslash" file.txt
i、 e.第二个参数的尾随斜杠使其认为结束引号已转义

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

  • 我从PowerShell调用exe
  • 我允许外部工具通过我的 它已经构建的exe参数(这将是最终的结果) 使用)
如何让我的程序理解带尾随斜杠的引用路径是一个参数

编辑 第4节正好描述了我的问题。基本上,我想让我的C++程序以批处理文件或VBScript的方式解释参数。strong>我无法更改参数进入程序的方式

编辑我将简化问题:

>上面的C++程序是这样的:

我希望它的行为如下:


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

我尝试在下面的第二个参数上加一个斜杠来编译它,并且能够生成所需的输出

“\\server\directory\file.ext”“C:\trailing\backslash\\\”“file.txt”

这就是输出

/home/a.out                                                                                                                          
\server\directory\file.ext                                                                                                           
C:\trailing\backslash\                                                                                                               
file.txt 

如果我的帖子对您有帮助,请向上投票:D

我尝试在下面的第二个参数中添加一个斜杠来编译这篇文章,并且能够生成所需的输出

“\\server\directory\file.ext”“C:\trailing\backslash\\\”“file.txt”

这就是输出

/home/a.out                                                                                                                          
\server\directory\file.ext                                                                                                           
C:\trailing\backslash\                                                                                                               
file.txt 

如果我的帖子对您有帮助,请向上投票:D

您必须使用另一个反斜杠来保护后面的反斜杠,否则该反斜杠将被视为以下双引号的转义字符。 请参阅Raymond Chen的文章,了解这种行为的基本原理。 以下是相关部分的引用:

  • 没有引号的反斜杠串没有特殊意义
  • 偶数个反斜杠后跟引号被视为成对的受保护反斜杠,后跟一个单词终止符
  • 后跟引号的奇数反斜杠被视为成对的受保护反斜杠,后跟受保护引号

您必须使用另一个反斜杠来保护尾随的反斜杠,否则该反斜杠将被视为以下双引号的转义字符。 请参阅Raymond Chen的文章,了解这种行为的基本原理。 以下是相关部分的引用:

  • 没有引号的反斜杠串没有特殊意义
  • 偶数个反斜杠后跟引号被视为成对的受保护反斜杠,后跟一个单词终止符
  • 后跟引号的奇数反斜杠被视为成对的受保护反斜杠,后跟受保护引号

如果您对命令行解析不满意,可以自己执行:

只需根据需要使用和解析命令行


其他帖子已经描述了如何/应该如何处理命令行(请参阅)。

如果您对命令行解析不满意,您可以自己做:

只需根据需要使用和解析命令行


其他帖子已经描述了命令行是如何处理的(参见)。

这里是C++命令行参数。我同意,但是如果我不能控制参数是如何构建的呢?@ JoBo“但是如果我不控制参数是如何构建的呢?”你总是可以检查命令行参数是否有一个后置反斜杠,并考虑程序代码中的这种情况,很容易。你能详细说明我在C++中如何做到这一点吗?@πῥεῖ 处理如此糟糕的输入并不是那么容易。考虑<代码>“c:\带空格的路径”< /代码>。C运行时会将其拆分为以下参数:
C:\path
with
空格“
。不清楚如何“修复”“如果可能的话,请提供这种投入。这是调用方的工作,通过引用适当的方法来修复程序。这里有一个C++命令行参数。我同意,但是如果我不能控制参数的构建,又会怎么样?@ JoBo“但是如果我不能控制参数的构建,那会怎样?”你总是可以检查命令行参数是否有一个后置反斜杠,并考虑程序代码中的这种情况,很容易。你能详细说明我在C++中如何做到这一点吗?@πῥεῖ 处理如此糟糕的输入并不是那么容易。考虑<代码>“c:\带空格的路径”< /代码>。C运行时会将其分为以下参数:
C:\path
with
spaces“
。如果可能的话,还不清楚如何“修复”此类输入。调用者的工作是通过正确引用来修复其程序。本文介绍了可用于正确引用参数的函数
ArgvQuote()
(无论是否有尾随反斜杠)。这是程序调用方必须尊重的内容。否则,这是他们程序中的错误!这两篇文章都是关于如何正确引用和转义您正在创建的命令行中的字符。我说的是,当我的程序使用非常标准的Windows样式时,argv中的结果内容是垃圾许多程序都可以处理的参数(带尾随斜杠的路径,其周围有引号)有一个关于如何解析命令行参数的事实标准,由Microsoft C运行时和
命令行到argvv
定义。如果反斜杠后跟双引号,则该事实标准要求反斜杠加倍。如果您正在谈论的程序可以处理未经反斜杠,则它们正在解析命令-以非标准方式(例如,通过调用
GetCommandLine()
并执行手动parsin