执行net use命令

时间:2013-01-23 07:49:30

标签: java process batch-file runtime.exec

我需要执行net use命令,该命令写在批处理文件中以启用驱动器。批处理文件如下:

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

上面的批处理文件为我启用了一个驱动器,它可以看作L:驱动器给我。 我需要通过java代码执行这个批处理文件,然后将一些文件写到这个驱动器上。

我使用以下代码执行此批处理文件:

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

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

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

2 个答案:

答案 0 :(得分: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
// ...

答案 1 :(得分:2)

我怀疑当命中实际的命令shell时,windows不喜欢“/”。也许尝试“\”而不是? 外部流程执行有点棘手 - 您可能希望查看Apache Commons Exec project来帮助您。

相关问题