2009-11-23 85 views
1

在下面的语句:如何在传递给system()时克服路径中的空间?

system("%TESTCASES_PATH%SIP\\test.bat"); 

的%TESTCASES_PATH%得到解决,以 “C:\ Program Files文件...”。

作为调用系统的这样的结果是:

“‘C:\程序’不被识别为内部或外部的命令..”

“C:\程序”被认为是一个可执行文件。

如何解决上述问题?

编辑:试着在答案中提出什么,我看到了同样的行为。下面是实际的代码:

#include <stdio.h> 
#include<conio.h> 

int main() 
{ 
    system("\"%TESTCASES_PATH%SIP\\Provisioning\\CrHomeDnOfficeCodeDestCodeBySoap\\CreateHomeDnOfficeCode.bat\""); 
    //system("\"%TESTCASES_PATH%SIP\\tests.bat\""); 
    getch(); 

    return 0; 
} 

回答

8

使用双引号来传递整个路径作为可执行文件/批处理文件:

system("\"%TESTCASES_PATH%SIP\\test.bat\""); 

否则,什么是后一个空间,成为第一个命令行参数。

编辑:也许在你的设置上,%TESTCASES_PATH%没有被system()函数扩展。在大多数系统中,可以检索一个环境变量与getenv()值:

char cmd[FILENAME_MAX]; 
snprintf(cmd, FILENAME_MAX, "\"%s\\test.bat\"", 
    getenv("TESTCASES_PATH")); 
system(cmd); 
+0

Andomar, 我仍然看到相同的问题。 – 2009-11-23 14:41:32

+0

@Prabhu。 S:也许你必须自己扩展环境变量(回答编辑) – Andomar 2009-11-23 14:52:24

+0

@Andomar,你是对的。这就是诀窍! – 2009-11-24 01:33:05

3

什么:

system("\"%TESTCASES_PATH%SIP\\test.bat\""); 

字符串中的额外的双引号放行文件名以白色空间到系统调用。

1

对这两种解决方案都有一个警告:用一个不包含空格的字符串对它们进行测试。

它可能在某些Windows Shell上失败。

相关问题