头痛 - 从java运行批处理文件

时间:2011-10-11 11:07:01

标签: java windows batch-file runtime

所以,首先我要说的是,我已经找到了每个Q& A,无论是在网站上还是网站,我都能找到,而且我还在打砖墙。

我的计划:

我的所有程序都在我的程序所在的目录中运行批处理文件。

代码是:

try {

        Process p = Runtime.getRuntime().exec("cmd /c start startclient.bat");

      } catch (IOException ex) {

        Logger.getLogger(MCPFrame.class.getName()).log(Level.SEVERE, null, ex);

      }
    }

当我执行代码时,我会收到警告窗口:

Windows cannot find 'startclient.bat'. Make sure you typed the name correctly, and then try again.

如果我用:

指定目录
Process p = Runtime.getRuntime().exec("cmd /c start C:\\Folder\\startclient.bat");

我明白了:

The system cannot find the path specified.
Press any key to continue . . . 
C:\Windows\system32>

所以我没有受过教育的猜测是,当我通过java调用批处理文件时,它是从“C:\ Windows \ system32>”开始的。但是当我只是双击批处理文件时,它从本地目录开始。

我该如何解决这个问题?

:(

PS 踢球者,我实际上去年有这个东西工作,但由于某种原因,它将不再表现。

PPS 我正在运行Win 7,一切都是最新的。

2 个答案:

答案 0 :(得分:4)

(我只是评论,但我还没有足够的代表发表评论,因此这个“回答”)

我使用了很多从Java调用的批处理文件(在Linux,OS X和Windows上)和 首先要知道的是你应该基本上永远不要使用构造函数一个字符串,因为它确实是有问题的。

您最好始终自己创建参数数组并使用此方法:

public Process exec(String [] cmdArray)

您还必须知道正确使用流可能会非常棘手。在许多情况下,您最好简单地使用可以更轻松地处理批处理文件的库。

例如,您可能不喜欢重新发明轮子,而不是Apache的公共执行者:

http://commons.apache.org/exec/

答案 1 :(得分:2)

当我指定像C:\ Folder \ startclient.bat这样的目录时,我有

之后的反斜杠
C:\\ as forward slashes and only one.

C:\\Folder/startclient.bat

下面应该适合你。嗯,我希望如此。适合我。

    try {
        Runtime rt = Runtime.getRuntime();
        rt.exec("cmd.exe /c start C:\\Folder/startclient.bat");
    } catch (Exception ex){

    }