2013-08-16 56 views
0

我试图运行使用JDK7u25的CMD文件,下面的代码:执行文件夹中包含CMD文件与空间

try { 
      ProcessBuilder pb = new ProcessBuilder(cmd); 
      pb.directory(workingDir); 
      proc = pb.start(); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
      throw e; 
     } 
     // StdOut and Err Stream must be read immediatly even if they are not used 

     // any error message? 
     StreamInlet error = new StreamInlet(proc.getErrorStream(), "ERROR"); 

     // any output? 
     StreamInlet output = new StreamInlet(proc.getInputStream(), "OUTPUT"); 

     // kick them off 
     error.start(); 
     output.start(); 

     if (wait) { 
      try { 
       exitCode = proc.waitFor(); 
      } catch (InterruptedException e) { 
       System.out.println("Waiting for process was interrupted"); 
      } 
      if (addMetaInfo) 
       System.out.println("Return value = " + exitCode); 
     } 

其中cmd=[cmd.exe, /c, C:\My Root\scripts\windows\tools\MyCLI.cmd, -c, C:\Local Disk D\My Tutorial\RegressionTests.xml, -d, 02_RecordViewer_Test, -l"ERROR"]

但它不工作,我得到下面的输出。

“C:\我的”不被识别为内部或外部的命令,

运行的程序或批处理文件。

在调用cmd文件之前,我已经通过添加显式的“CMD.EXE/C”对JDK7U21 issue进行了必要的更改。另外我也使用了JDK7u21问题中提到的ProcessBuilder类。

如果我试图执行CMD文件被放置在C中,它工作得很好:\ MyRoot即一个文件夹,没有它的名字空间。

有人可以帮忙吗?

+0

这是因为'cmd'需要用引号括起来'路径 “C:\我的根\脚本\ WINDOWS \工具\ MyCLI.cmd”'和' “C:\本地磁盘d \我的教程\ RegressionTests.xml” '通过Windows – dic19

回答

3

你需要用引号括您的路径,cmd要求:

String[] cmd = {"cmd.exe", "/c", "\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....}; 

更新,我们通过聊天讨论,这个问题似乎是ProcessBuilder传递参数cmd.exe。但是,由于您有完整的可执行文件路径,实际上根本不需要cmd.exe。所以,命令应该是这样的:

String[] cmd = {"\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....}; 
+0

cmd是一个String []。我提出的cmd值是我从eclipse调试时得到的值。正如你上面提到的,我也尝试用双引号括起来。但没有运气:( – ParagJ

+0

但你从CMD得到同样的错误?请发表你怎么了'cmd'控制台调用相同的命令,并检查是否正常工作。 – dic19

+0

如果我把它明确地(在引号引起)控制台可以工作,但同一个命令行不能在java中工作 – ParagJ

0

我会忍不住改变向前斜杠反斜杠,和逃避的空间。

C:/My\ Root/scripts/windows/tools/MyCLI.cmd 
1

我刚刚注意到这个问题已经在JDK7u25中解决了。我刚刚发现它在Release Notes