我需要执行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);
问题是,当我尝试访问驱动器来编写文件时,它会给我一个未找到路径的异常。有时会运行,有时却不运行。
朋友们可以帮助我了解问题所在。我正在执行什么错误的步骤。如果我不清楚我的问题,请告诉我。
答案 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来帮助您。