我正在使用JSF应用程序,单击.bat
按钮时我想要启动Command
,此脚本位于我项目的webcontent目录中。
行动的代码是:
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;
}
路径构造正确但脚本未启动!
调试屏幕:
这是我得到的输出:
因此路径正确但脚本未启动。当我将.bat
放在c:\Tools
上并使用此路径"C:\\Tools\\cmd.bat"
时,它可以正常工作。
有什么问题?
答案 0 :(得分:1)
您可以发布批处理文件的内容吗?
我注意到实际路径用作新命令提示符窗口的标题。这是误用start
命令的典型行为(第一个参数不是可执行文件的路径,而是新窗口的title
。不要问我,我不知道为什么...... )
您是否在批处理文件中使用start
?
答案 1 :(得分:1)
如果您使用 start 来运行批处理,则需要将引用的标题作为第一个参数,因为您的路径包含空格并且也会被引用。
start命令始终将第一个引用的参数用作标题。
start "myTitle" cmd.exe /c myBat.bat
这样的事情应该有效
String[] command = { "cmd.exe", "/C", "start", "\"myTitle\" \""+realPath + "Tools\\cmd.bat\""
};
您还应该将cmd.bat重命名为更好的名称,以便它不会与cmd.exe冲突。