【发布时间】:2011-01-15 13:38:21
【问题描述】:
我不知道如何让 cmd.exe 不将 %PATH% 之类的内容解释为环境变量。
鉴于此程序:
#include<stdio.h>
#include<windows.h>
int main(int argc, char *argv[])
{
int i;
printf("cmd line: %s\n", GetCommandLine());
for (i = 0; i < argc; i++) {
printf("%d: %s\n", i, argv[i]);
}
return 0;
}
根据参数的位置,我有这些不同的输出:
>args "k\" o" "^%PATH^%"
cmd line: args "k\" o" "%PATH%"
0: args
1: k" o
2: %PATH%
>args "^%PATH^%" "k\" o"
cmd line: args "^%PATH^%" "k\" o"
0: args
1: ^%PATH^%
2: k" o
我猜这是因为 cmd.exe 无法识别转义的 \" 并将转义的双引号视为关闭第一个引号,而在第一个情况下将 %PATH% 未引用。我这么说是因为如果我不引用这个论点,它总是有效的:
>args ^%PATH^% "k\" o"
cmd line: args %PATH% "k\" o"
0: args
1: %PATH%
2: k" o
但是我可以没有空格...
【问题讨论】:
标签: windows command-line cmd