Я не могу понять, как 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
но тогда у меня не будет пробелов ...