在Java中执行批处理文件时出现问题

时间:2010-09-10 14:48:35

标签: java batch-file

我正在尝试在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文件夹的批处理文件时,它运行正常....

有谁知道问题出在哪里?是关于间距字符吗?

提前致谢

4 个答案:

答案 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));