首页 > 解决方案 > C(视觉工作室)的 CMD 命令

问题描述

所以我想使用visual studio C项目执行我的程序文件文件夹中的python文件。(仅供参考,使用exe文件)。我知道系统功能可以执行命令。我想对我的命令说,转到 appdata 中的 python 文件夹,然后运行我的程序文件夹中的 python 文件。

我尝试了以下方式

char cmd[] = "C:\Users\%user%\AppData\Local\Programs\Python\Python37" "C:\Program Files (x86)\tool\tool.py";
system(cmd);

但它给了我一个错误文件名,目录名不正确。它也是一个应用程序,所以它应该是用户特定的。如何用实际用户名替换 %user%。

我尝试的第二种方法是将python设置为环境变量。然后运行

char cmd[] = "python " "C:\Program Files (x86)\tool\tool.py";

由于程序和文件之间存在空间。错误说找不到 C:\Program。我怎么说编译器包含空间作为目录的一部分?

标签: pythoncvisual-studiocmdexe

解决方案


让我们谈谈。

首先我不这么认为

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 字符串将“\”(反斜杠)字符保留为“转义”字符。该术语中有一个历史课,但那是另一天。重要的部分是它允许您将字符放入通常无法做到的字符串中。例如制表符 (\t)、换行符 (\n) 等。每当编译器看到“\”时,它就会期待另一个字符来完成“转义序列”。如果你真的想要一个反斜杠,你必须输入两个。

例如:

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% 在您的环境中正确定义。

接下来,您将引用一个包含空格的文件路径。这可能就是您尝试以您的方式使用引号的原因,但在这种情况下,这对您没有帮助。system 函数接受一个字符串,并且在大多数情况下并不关心它是什么。您需要一些东西来表明该空间是文件路径的一部分。这就是那些反斜杠可以真正帮助你的地方。

例如:

char cmd[] = "C:\\Windows\\system32\\cmd.exe /K dir \"C:\\Program Files (x86)\"";
system(cmd);

这应该会在您的桌面上打开一个 DOS/CMD 窗口,执行“C:\Program Files (x86)”目录,然后打开 cmd shell。有时以这种方式打开 shell 可以方便地查看默认环境是什么。

所以把它放在一起,你的程序应该看起来像这样:

int main() {
char cmd[] = "C:\\Users\\%user%\\AppData\\Local\\Programs\\Python\\Python37 \"C:\\Program Files (x86)\\tool\\tool.py\"";
system(cmd);
}

推荐阅读