2013-07-05 3 views
0

У меня есть несколько вопросов в C++ пакетных файлов:Пакетные файлы команд в C++

  1. Я пытался сделать систему («реж с: \»), но это всегда просто показать папку проекта, не папке C: \. Почему? Как я могу это исправить?

  2. Некоторые процессы в пакетном режиме (например, копирование) требуют контроля + c или управления + z, чтобы остановить их. Как я могу вставить такую ​​вещь в пакетную программу из программы на C++?

+1

Если у вас на самом деле есть 'system (" dir c: \ ");' в вашем коде, я ожидаю, что компилятор его отклонит. Если нет, напишите точно, что у вас есть в вашем коде ... –

+1

Для вашего второго вопроса, что именно вы пытаетесь сделать? Создание файла с некоторым текстом в нем было бы намного проще с использованием строковой константы на C++ и просто записи ее в файл, поэтому ... –

ответ

2
  1. обратной косой (\) символов в строках C используется как экранирующий символ для вставки без печати или иным образом «странные» символы в строках C - вы, наверное, видели, например, \n для символа новой строки. По этой причине, чтобы вставить буквальную обратную косую черту в вашу строку, вы должны написать \\ (иначе компилятор может ошибочно принять ее за escape-последовательность).

    В вашем конкретном случае компилятор видит escape-последовательность \, которая не определена как escape-последовательность, но многие компиляторы обрабатывают неопределенные escape-последовательности, просто игнорируя обратную косую черту; таким образом, то, что фактически видит пакетный интерпретатор, - dir c:. Теперь соглашение DOS состоит в том, что если вы просто пишете букву диска, за которой следует двоеточие, без какой-либо обратной косой черты, вы ссылаетесь на текущий каталог на этом диске; следовательно, поведение, которое вы видите. Чтобы это исправить, просто написать

    system("dir c:\\"); 
    
  2. Там нет стандартной функциональности для этого, хотя вы можете использовать функцию _popen (клон POSIX popen), чтобы получить что-то подобное.

С другим путем, если вы программируете на C++, вы не должны полагаться на партии, которые много: просто написать код для выполнения операции нужна непосредственно в C++ и избежать баловаться с (ужасной) Windows, командный интерпретатор.

+0

спасибо! но это вызывает еще два: – user2554080

+0

спасибо! это означает, что каждый раз, когда я использую back-slash, мне нужно записать его как \\? и еще одно: как я могу сделать командную команду sen для моей программы на C++? например: я хочу, чтобы переменная времени строки содержала вывод системы (время/t). Как я могу это сделать? – user2554080

+0

@ user2554080: вы можете использовать канал (например, используя функцию, указанную выше), но вам следует избегать этого, используйте вместо этого функции C++! Посмотрите заголовок ''. –

0

Если вы используете system("command") вы только выполнить одну команду, и если вы пытаетесь выполнить system("command2") условия выполнения такие же, как выполнение первого.

Если вы хотите позвонить некоторым командам, вам нужно позвонить одному из них: system(). Я пробовал это несколько лет назад, но это не очень хорошая идея. Либо вы можете сделать файл mybat.bat и выполнить его, используя system("mybat.bat")

В любом случае, я не рекомендую использовать system(). Read this.

И о второй части вашего вопроса. Может быть, вам нужно PostMessage, но я не уверен ... И это работает только на Windows.

+0

Первые два абзаца, правда, не имеют отношения к этой ситуации; Кроме того, 'PostMessage' не имеет отношения к консольным приложениям (и вы не можете использовать его в любом случае при использовании' system', так как он не предоставляет вам никаких 'HWND', которые вы можете использовать). –

+0

Похоже, что использование функции system() - плохая идея. Если да, то как я могу маневрировать файлы из C++-программы? Или как я могу заархивировать все другие возможности пакетного файла? – user2554080

+0

@ user2554080 Возможно использование одних и тех же вещей с C++ без использования вызовов 'system()'. Трудно сказать, что вам нужно, потому что я не знаю, что означает слово _manage_ в вашем случае. Вы должны использовать Google, после этого вы можете задать другой вопрос, если вы ничего не нашли. – ST3

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