windows cmd 转义字符和双引号

不得不说,微软的程序写的真是一言难尽,这个cmd的双引号机制也没有一个官方的文档给你讲清楚点。

首先我们知道的是,如果没有引号,cmd是用空格来分割参数的。如果一个参数有空格,就需要用双引号包围起来。

比如:

1
parm hello world

就给parm传了两个参数helloworld

1
parm "hello world"

用引号包围后,parm就只有一个参数hello world

这种想必常用cmd的都知道,本文主要问题在,我要这样写呢:

1
2
3
parm hel"lo world"
parm hello" world""ok"
parm """hello"""

这样就麻烦多了,你可以自己先写个程序玩一玩看看。我写了个程序测试:

展开代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#ifdef __cplusplus
#include <iostream>
using namespace std;

#else
#include <stdio.h>
#endif

int main(int argc, char* argv[])
{
#ifdef __GNUC__
printf("compile with gcc/g++ %d.%d.%d ", __GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__);
#elif _MSC_VER
printf("compile with msvc %d ", _MSC_VER);
#endif

#if defined(__DATE__) && defined(__TIME__)
printf(" %s %s\n", __DATE__, __TIME__);
#endif

for (int i = 1; i < argc; i++) {
printf("arg %d: %s\n", i, argv[i]);
}

return 0;
}

关于具体的引号解析策略,等有空了再具体看这篇文章学习学习,然后更博

https://stackoverflow.com/questions/7760545/escape-double-quotes-in-parameter/15262019


windows cmd 转义字符和双引号
https://jcdu.top/2021/09/04/windows cmd 转义字符和双引号/
作者
horizon86
发布于
2021年9月4日
许可协议