2014-09-14 6 views
3

Я запускаю Windows 8, и я использую cygwin для компиляции моего кода. Я пытаюсь выполнить команды командной строки с помощью команды system(). Кажется, это должно быть просто, но удивительно, что я не мог что-то изменить. Ниже мой код:Запуск командной строки от C

#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); 
} 

Однако выше программа просто возвращает переменную ошибку как «127» и переменную команду как «CD C: /». Некоторые поисковые запросы в кодах выхода показали, что это означает, что «127» означает, что команда не найдена. Я полностью потерян. Я искал какое-то время, но я могу найти только вопросы по этой проблеме, связанные с C#. Как выполнить команды командной строки из c-программы?

EDIT: Я попытался запустить программу из командной строки cygwin, и она работает нормально. Он просто работает некорректно из обычного cmd.exe и когда я дважды щелкаю по файлу .exe.

+0

Возможный дубликат [изменение каталога изнутри программы ac под окнами с использованием системной команды] (http://stackoverflow.com/questions/10811645/changing-the-directory-from-inside-ac-program-under-windows -using-system-comman) –

+0

Спасибо за ссылку! Однако он по-прежнему не учитывает, почему ни одна из команд не работает. –

ответ

2

Под Windows «cd» - встроенная команда в оболочке. Для его выполнения нужно запустить оболочку. Пожалуйста, проверьте также this answer.

EDIT: Вы можете использовать системную команду, чтобы запустить оболочку, как это:

system("<fullpath to cmd.exe>\\cmd.exe /c \"your command here\""); 

Он может получить довольно сложно с уцелевшими кавычки, если вы не используете один исполняемый файл после/с. Если для исполняемого файла или внутренней команды оболочки требуются параметры, вам может потребоваться удвоить и утроить кавычки. Для некоторых специальных символов, таких как | & & (pipe)> (перенаправление) вам нужно будет использовать специальные клавиши escape-символов Windows ^, которые 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 машину, используя только простые команды и экономит внутрибрюшинно .txt в окольном пути под домашним каталогом пользователя, называемого «someUser». Обратите внимание на^escape.

+0

Это имеет смысл. Ссылка действительно не отвечает, как выполнить мою цель. Я поеду еще раз о том, как открыть оболочку в c. Спасибо! –

+0

Большое вам спасибо за помощь, но она все еще не работает. Я могу запустить его из командной строки, и он будет работать нормально, но я хочу иметь возможность запускать его как .exe-файл. Есть ли определенная библиотека, которую я должен включить? –

+0

Что конкретно не работает? – DNT

Смежные вопросы