0

我需要执行一个写入批处理文件的 net use 命令来启用驱动器。批处理文件如下:

net use * /delete /Y
net use l: \\<windows drive name> /user:<domain>\<username> <password>

上面的批处理文件为我启用了一个驱动器,它显示为 L: drive to me。我需要通过java代码执行这个批处理文件,然后将一些文件写入这个驱动器。

我正在使用下面的代码来执行这个批处理文件:

String[] array = { "cmd", "/C", "start", "C:/file.bat" };
Runtime.getRuntime().exec(array);

问题是当我尝试访问驱动器以写入文件时,它给了我一个找不到路径的异常。有时它运行,有时它不运行。

朋友们可以帮我了解问题出在哪里。我正在执行什么错误的步骤。如果我不清楚我的问题,请告诉我。

4

2 回答 2

2

有时它运行,有时它不运行。

这看起来像一个竞争条件。Runtime.exec()在单独的进程中执行您的命令,而调用应用程序继续运行。然后,当您尝试访问文件时,未定义批处理文件是否已经完成。

Runtime.exec()返回一个Process对象,您可以使用该对象与子进程进行通信。在您的情况下,等待该过程完成就足够了:

Process p = Runtime.getRuntime().exec(array);
p.waitFor();

// Now, your batch file should be completed and you can continue
// ...
于 2013-01-23T08:11:09.470 回答
2

我怀疑当它到达实际的命令外壳时,Windows 不喜欢“/”。也许尝试“\”代替?外部流程执行有点棘手——你可能想看看Apache Commons Exec 项目来帮助你。

于 2013-01-23T08:11:24.527 回答