Давай поговорим.
Во-первых, я не думаю, что
char cmd[] = "C:\Users\%user%\AppData\Local\Programs\Python\Python37" "C:\Program Files (x86)\tool\tool.py";
делает то, что, как ты думаешь, делает. Когда вы складываете две подобные строки вместе, компилятор обрабатывает ее как одну длинную строку, и вы не получите пробел между "... Python37" и "C: ...". Лучше просто сделать эту одну строку и вставить свой разделитель пробелов.
Например:
char cmd[] = "C:\Users\%user%\AppData\Local\Programs\Python\Python37 C:\Program Files (x86)\tool\tool.py";
Следующая проблема заключается в том, что строки C резервируют '\' (back-sla sh) персонаж как «побег». В этой терминологии есть урок истории, но это на другой день. Важной частью является то, что он позволяет вам помещать символы в строки, которые вы обычно не сможете. Примерами являются такие вещи, как вкладки (\ t), переводы строк (\ n) и т. Д. c. Всякий раз, когда компилятор видит «\», он ожидает, что другой символ завершит «escape-последовательность». Если вы на самом деле хотите использовать обратную косую черту sh, вы должны указать две.
Например:
char cmd[] = "C:\\Users\\%user%\\AppData\\Local\\Programs\\Python\\Python37 C:\\Program Files (x86)\\tool\\tool.py";
Далее вы используете расширение переменной среды "% user%". Я предполагаю, что определяется в вашей среде (это не в моей). Вы должны помнить об окружающей среде, и вы можете проверить, что все расширяется, как вы ожидаете. Один из простых способов сделать это - использовать тот же код, но другую строку cmd:
Например:
char cmd[] = "echo %USER% >c:\\mydir\\myoutput";
system(cmd);
Полезно указать полный путь к перенаправлению, чтобы убедиться, что он заканчивается там, где вы ожидаете. Я снова предположу, что% USER% правильно определен в вашей среде.
Далее вы ссылаетесь на путь к файлу, в котором есть пробел. Возможно, поэтому вы пытались использовать кавычки так, как вы это делали, но в этом случае это вам не поможет. Системная функция принимает строку и по большей части не очень заботится о том, что это такое. Вам нужно что-то, чтобы указать, что пространство является частью пути к файлу. Вот где эти косые черты могут действительно помочь вам.
Например:
char cmd[] = "C:\\Windows\\system32\\cmd.exe /K dir \"C:\\Program Files (x86)\"";
system(cmd);
Это должно открыть окно DOS / CMD на вашем рабочем столе, выполнить каталог "C: \ Program Files (x86)", а затем оставить cmd оболочка открыта. Иногда, оставляя открытую оболочку таким образом, может быть полезно увидеть, что такое env по умолчанию.
Таким образом, в целом, ваша программа должна выглядеть примерно так:
int main() {
char cmd[] = "C:\\Users\\%user%\\AppData\\Local\\Programs\\Python\\Python37 \"C:\\Program Files (x86)\\tool\\tool.py\"";
system(cmd);
}