Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 执行netuse命令_Java_Process_Batch File_Runtime.exec - Fatal编程技术网

Java 执行netuse命令

Java 执行netuse命令,java,process,batch-file,runtime.exec,Java,Process,Batch File,Runtime.exec,我需要执行在批处理文件中写入的net use命令来启用驱动器。批处理文件如下所示: net use*/delete/Y net use l:\\/用户:\\ 上面的批处理文件为我启用了一个驱动器,其可见形式为L:drive to me。 我需要通过java代码执行这个批处理文件,然后将一些文件写入这个驱动器 我正在使用以下代码执行此批处理文件: String[] array = { "cmd", "/C", "start", "C:/file.bat" }; Runtime.getRuntim

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

net use*/delete/Y
net use l:\\/用户:\\
上面的批处理文件为我启用了一个驱动器,其可见形式为L:drive to me。 我需要通过java代码执行这个批处理文件,然后将一些文件写入这个驱动器

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

String[] array = { "cmd", "/C", "start", "C:/file.bat" };
Runtime.getRuntime().exec(array);
问题是,当我试图访问驱动器写入文件时,它会给我一个路径未找到异常。它有时运行,有时不运行

朋友们,任何人都可以帮助我了解问题所在。我走错了哪一步。如果我对我的问题不清楚,一定要让我知道

它有时运行,有时不运行

这看起来像是比赛条件。在调用应用程序继续运行的同时,在单独的进程中执行命令。然后,当您尝试访问批处理文件时,该批处理文件是否已完成,这是未定义的

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

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

// Now, your batch file should be completed and you can continue
// ...
它有时运行,有时不运行

这看起来像是比赛条件。在调用应用程序继续运行的同时,在单独的进程中执行命令。然后,当您尝试访问批处理文件时,该批处理文件是否已完成,这是未定义的

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

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

// Now, your batch file should be completed and you can continue
// ...

我怀疑当实际的命令shell中出现这种情况时,windows不喜欢“/”。也许试试“\”吧?
外部进程执行有点棘手-您可能需要查看以帮助您解决问题。

我怀疑,当实际的命令shell遇到这种情况时,windows不喜欢“/”。也许试试“\”吧?
外部流程执行有点棘手-您可能需要查看以帮助您解决问题。

这听起来也很有道理@安德烈亚斯:谢谢你的回复。这对我有用。然而,有一件事我想在这方面更新。这是我第一次运行代码,它暂停了,我不得不强制停止执行。之后,当我重新运行代码时,它工作了。我再次运行它,然后它也工作了。因此,问题在于我必须在应用程序中使用此逻辑,我如何确保每次调用它时它都会运行。您需要添加某种监视,以确保命令在特定时间范围内完成,否则将终止并重新执行该命令。您可以将其添加到代码中(例如,通过实现一个看门狗线程),但如果可能的话,我会看看@demaniak提到的Apache Commons Exec项目,它提供了这种开箱即用的监控。这听起来也很有道理@安德烈亚斯:谢谢你的回复。这对我有用。然而,有一件事我想在这方面更新。这是我第一次运行代码,它暂停了,我不得不强制停止执行。之后,当我重新运行代码时,它工作了。我再次运行它,然后它也工作了。因此,问题在于我必须在应用程序中使用此逻辑,我如何确保每次调用它时它都会运行。您需要添加某种监视,以确保命令在特定时间范围内完成,否则将终止并重新执行该命令。您可以将其添加到代码中(例如,通过实现一个看门狗线程),但如果可能的话,我会看看@demaniak提到的Apache Commons Exec项目,它提供了这种开箱即用的监控。谢谢demaniak,我在代码中也使用了您的建议。谢谢demaniak,我在代码中也使用了您的建议。