我正在运行Windows 8,我正在使用cygwin来编译我的代码。 我尝试使用system()命令运行命令行命令。这似乎应该很简单,但令人惊讶的是我无法改变它。以下是我的代码:
#include <stdio.h>
#include <string.h>
int main ()
{
char command[50];
int error = 0;
strcpy( command, "cd c:/");
error = system(command);
printf("%s\n", command);
printf("%d\n", error);
while(1)
{
;
}
return(0);
}
但是,上述程序只返回变量错误&#34; 127&#34;和变量命令为&#34; cd c:/&#34;。一些谷歌搜索退出代码显示,这意味着&#34; 127&#34;表示找不到命令。我完全迷失了。我已经搜索了一段时间,但我只能在与C#相关的问题上找到问题。如何从c程序运行命令行命令?
编辑:我尝试从cygwin命令行运行程序,它运行正常。它只是从普通的cmd.exe运行不正确,当我双击.exe文件时。
答案 0 :(得分:2)
在Windows&#39; cd&#39;是shell中的内置命令。您需要运行shell来执行它。 请检查this answer。
编辑:您可以使用system命令运行这样的shell:
system("<fullpath to cmd.exe>\\cmd.exe /c \"your command here\"");
除非在/ c之后运行单个可执行文件,否则使用转义引号会非常棘手。如果您的可执行文件或内部shell命令需要参数,则可能需要对引号进行加倍和三次转义。对于某些特殊字符,例如| &安培;&安培; (管道)&gt; (重定向)你需要使用Microsoft为此目的添加的特殊窗口^转义字符。
以下是此类命令的示例。这个在一小段延迟后重新启动Windows:
system("cmd.exe /c \"start /b shutdown -t 1 -r\"");
这是一个更复杂的特殊逃脱:
system("cmd.exe /c \"ipconfig ^| find \"IPv4\" ^> C:\Users\someUser\a.txt ^&^& for /f \"tokens=13 delims=: \" %%i in (C:\Users\someUser\a.txt) do echo %%i ^> C:\Users\someUser\ip.txt ^&^& del C:\Users\someUser\a.txt\"");
最后一个只使用简单的命令获取机器的ip,并以迂回方式保存到ip.txt,该用户名为&#39; someUser&#39;用户的主目录下。注意^ escapes。