2013-07-11 59 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:\ Users \ 500543 \ Documents \批處理文件項目\ 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); 

然後。

至於你編輯的問題,因爲你已經打上問題使用,這裏是一個C++的解決方案是如何正確地執行你的函數:

#include <sstream> 

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

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

現在不要做這一個XY的問題!我認爲你應該理解這些示例的原理:只需在一對雙引號字符('\"')中包裝你的批處理文件名稱,即shell可以正確解釋它。 還有純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\"");