我正在尝试在Java应用程序中执行批处理文件。代码如下:
Runtime.getRuntime().exec("cmd /C start C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat");
执行时,会出现一个错误对话框,告诉“Windows无法找到'C:/ Documents'。请确保您正确输入了名称....”
当我使用相同的代码执行另一个名为file.bat且位于C:/ Temp文件夹的批处理文件时,它运行正常....
有谁知道问题出在哪里?是关于间距字符吗?
提前致谢
答案 0 :(得分:2)
编辑:
似乎start命令需要一个额外的参数,只要启动的可执行文件的路径包含在“。因为必须包含空格的参数”,这有点令人困惑,因为启动命令在例外时起作用。有一个没有空格的路径,因此不会用“。”这就是当我测试下面的代码c:/ temp时发生的事情,它没有额外的参数。
负责的参数是打开的窗口的标题。它必须是第二个参数,如果它包含空格必须用“。
包围我建议始终使用“标题和路径。
所以这是更新的命令:
你需要附上
c:/文件和设置/...
with“因为文件名包含空格。当使用带有参数的启动命令时,你需要包含一个标题。”
对于Java来说:
Runtime.getRuntime()。exec(“cmd / C. start \“Server \”\“C:/ Documents and 设置/ Zatko /我的 文件/项目-工作区/ IUG /外部/应用/存档/运行server.bat \ “”);
格尔茨, GHAD
答案 1 :(得分:2)
使用数组要好得多:
String[] array = { ... };
Runtime.getRuntime().exec(array);
,如
String[] array = { "cmd", "/C", "start",
"C:/Documents and Settings/Zatko/My Documents/.../run-server.bat" };
Runtime.getRuntime().exec(array);
如果您在其中一个参数中有空格,则使用数组尤为重要。
答案 2 :(得分:2)
Runtime.getRuntime().exec("cmd /C start \"\" \"C:/Documents and Settings/Zatko/My Documents/Project-Workspace/IUG/external/apps/archive/run-server.bat\"");
应该有用。
您需要引用带有空格或shell元字符的参数。并且start
期望第一个引用的参数是一个窗口标题,所以给它一个空的,所以它很高兴。
答案 3 :(得分:0)
这有效:
List<String> templst = new ArrayList<String>();
templst.add("cmd");
templst.add("/C");
templst.add("start");
templst.add("backup.bat");
Process p = rt.exec(templst.toArray(new String[]{}), null, new File(path));