2010-09-10 80 views
0

我想在我的Java应用程序中执行批处理文件。代码如下:在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:/文件’。请确保您corretly键入的名字......”

当我用相同的代码执行另一个批处理文件,命名为file.bat,并位于C:/ Temp文件夹中,它可以很好地工作....

有没有人知道问题出在哪里?它是关于间隔字符吗?

在此先感谢

回答

2

编辑:

似乎开始命令需要时启动可执行文件路径被封闭在一个额外的参数这个“作为一个必须围绕它通过包含空格的参数。”有点令人困惑,因为当一个路径没有空格时,起始命令的作用就是例外,因此并没有将它包含在内。“当我测试下面的代码文件夹c:/ temp并且它没有额外的工作时会发生这种情况参数

负责的参数是窗口的标题,我打开了。它必须来第二个参数,如果它包含空格必须包围“。

我建议始终使用”为标题和路径。

因此,这里是更新的命令:

你需要附上

C:/文件和设置/ ...

与“为文件名包含空格和您需要在使用带有参数的start命令时包含标题。

对于Java,这将是:

调用Runtime.getRuntime()EXEC( “CMD/C 启动\” 服务器\ “\” C:/ Documents和 设置/ Zatko /我 文档/Project-Workspace/IUG/external/apps/archive/run-server.bat \ “”);如果你有一个空格

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

使用数组是尤为重要:

格尔茨, GHAD

+0

我确实按照说明操作。但是,当我运行代码时,出现DOS命令窗口,光标闪烁在 C:\ Documents and Settings \ Zatko \ My Documents \ Project-Workspace \ IUG \> – Anto 2010-09-10 15:05:02

+0

检查您的服务器是否已经启动。批处理文件可能会启动一个将命令窗口打开的进程。当我尝试使用仅包含暂停命令的批处理时,它在这里完美工作。 – GHad 2010-09-10 15:13:00

+0

不,服务器未启动... – Anto 2010-09-10 15:17:21

2

这是更好的使用数组的参数,就像你一样。

+0

可以举一个使用它的例子在上述情况下? – 2011-06-21 12:06:34

+0

我当然想到了同样的事情,并尝试过,但它不起作用!它只打开一个命令窗口,当前文件夹作为项目根目录(与上面tony的注释中提到的一样) – 2011-06-21 15:49:25

+0

我得到了原因,查看我的回答如下 – 2011-06-21 16:19:59

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

+0

不要尝试使用/ b标志,它不起作用在这种情况下。相反,只需将exit作为批处理文件中的最后一条命令即可。 – 2011-06-21 16:19:27

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期望第一个被引用的参数是一个窗口标题,所以给它一个空的标题,这样很开心。