从C运行命令行

时间:2014-09-14 06:47:22

标签: c command-line command-prompt

我正在运行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文件时。

1 个答案:

答案 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。