在Web应用程序上启动.bat

问题描述:

我在JSF应用程序中,我有一个.bat,我想在点击Command按钮时启动,此脚本位于我的项目的webcontent目录中。 动作的代码是:在Web应用程序上启动.bat

public String genererRapportTable() { 
    try { 
    ServletContext ctx = (ServletContext) FacesContext 
     .getCurrentInstance().getExternalContext().getContext(); 
    String realPath = ctx.getRealPath("/"); 
    String[] command = { "cmd.exe", "/C", "start", realPath + "Tools\\cmd.bat" }; 
    Runtime.getRuntime().exec(command); 
    } catch (IOException e) { 
    e.printStackTrace(); 
    } 
    return null; 
} 

的路径是否正确构建,但剧本没有启动!

调试屏幕:

enter image description here

这是我得到的输出:

enter image description here

所以路径是正确的,但剧本没有启动。当我把.bat放在c:\Tools上时,我使用这个路径"C:\\Tools\\cmd.bat"它可以工作。 问题是什么?

你能发布的批处理文件的内容是什么? 我注意到实际路径被用作新的命令提示符窗口的标题。这是start指令的误用的典型行为(第一个参数是不是可执行文件的路径,但title新窗口。不要问我,我不知道为什么...) 你在使用start批处理文件?

+0

是的是的,我使用过的启动不跑,我只是试着运行测试! – Potinos 2012-07-18 11:06:08

+0

的java -Xmx512m -jar schemaSpy_5.0.0.jar -t orathin -db nrefurg -host colline2 -port 1533 -s GA_ADM -u ga_adm -p ga_adm -o DOC -dp ojdbc-14.jar -i DOC -GV“Graphviz_2。 28“-hq – Potinos 2012-07-18 11:08:04

+1

就像@jeb评论的那样,你需要添加标题参数(第一个参数)。在命令提示符下检查'start /?'并验证语法。 – Cascader 2012-07-18 11:36:04

如果您使用开始运行您的批处理,您需要将带引号的标题作为第一个参数,因为您的路径包含空格并且也将被引用。
启动命令始终使用第一个带引号的参数作为标题。

start "myTitle" cmd.exe /c myBat.bat 

像这样的东西应该工作
String[] command = { "cmd.exe", "/C", "start", "\"myTitle\" \""+realPath + "Tools\\cmd.bat\""};

还应该重命名cmd.bat到一个更好的名字,所以不能用cmd.exe的碰撞。

+0

但使用时正确运行: 字符串[]命令= { “cmd.exe的”, “/ C”, “启动”, “C:\\工具\\ cmd.bat”}; Runtime.getRuntime()。exec(command); 此ID cmd.bat存在于c:\ Tools \ 只有当我在服务器目录上试用这个问题时! – Potinos 2012-07-18 11:36:08

+1

我想这是因为'C:\ Tools \ cmd.bat'不包含空格 – jeb 2012-07-18 12:26:49

+0

是的,它是空间,我怎么能逃脱它? – Potinos 2012-07-18 13:56:28