2013-07-11 2 views
0

Я хочу, чтобы выполнить файл ванны, используя system() и путь к файлу будет передан в функцию, так это будет выглядеть следующим образом:Выполнение пакетный файл из C++ с пробелами в пути

void executeBatch(char* BatchFile){ 
    system(BatchFile); 
} 

Теперь проблема в том, что путь, пройденный в не будет иметь экранировать кавычки игнорировать пространства, например, пользователь будет вход:

"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat" 

Как добавить экранировать кавычки в пути, пройденном в?

Так что я essentually изменить:

"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat" 

в

"\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\"" 
+0

перейти в этот каталог и убедитесь, что файл существует 'C: \ Пользователи \ 500543 \ Documents \ Batch File Project \ Testing.bat' –

+0

@Nick Насколько я понимаю, OP будет сталкиваться с теми же проблемами при попытке изменить рабочий каталог или нет? –

+0

@ g-makulik Я не прошу изменить рабочий каталог. Я прошу убедиться, что файл .bat существует там, где он думает, что он сидит. –

ответ

1

Попробуйте

system("\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\""); 

Что касается Вашего дополнительного вопроса от Вашего комментария, вы должны использовать:

char* it = "\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\""; 

system(it); 

затем.

Что касается вашего редактируемого вопроса, так как вы разметили вопрос использовать , вот с решением ++, как правильно реализовать функцию:

#include <sstream> 

int executeBatch(const char* fullBatchFileName) 
{ 
    std::ostringstream oss; 

    oss << '\"' << fullBatchFileName << '\"'; 
    return system(oss.str().c_str()); 
} 

Не делайте эту проблему двухкоординатной сейчас Я думаю, что вы должны были понять принцип из этих образцов: просто оберните имя командного файла в пару символов двойной кавычки ('\"'), чтобы оболочка могла правильно интерпретировать его. Для этого доступны также методы библиотеки c c (см. <cstring>), но я бы не рекомендовал их, если вы можете использовать стандартную библиотеку C++.

0

Попробуйте добавить спасся двойные кавычки вокруг командной строки, т.е.

system("\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\""); 
0

Вы должны бежать кавычки:

 system("\"C:\\Users\\500543\\Documents\\Batch File Project\\Testing.bat\""); 
Смежные вопросы