【发布时间】:2010-09-01 18:57:34
【问题描述】:
我想在服务器上远程执行一个 bat 文件
\\testserver\someFolderName\test.bat。
我正在使用流程构建器,并希望使用
procbuilder.directory(....),
但无法成功。
感谢任何帮助。谢谢
【问题讨论】:
-
你有没有找到解决这个问题的方法?
标签: java processbuilder
我想在服务器上远程执行一个 bat 文件
\\testserver\someFolderName\test.bat。
我正在使用流程构建器,并希望使用
procbuilder.directory(....),
但无法成功。
感谢任何帮助。谢谢
【问题讨论】:
标签: java processbuilder
在过去,我使用PSExec 快速而肮脏地完成了它
只需从您的程序作为自己的进程启动它,并使用所需的参数来访问远程计算机上的批处理。
【讨论】:
我认为您不能为 ProcessBuilder 执行 UNC 路径,但无论如何这并不重要。
要运行 .bat 文件,您需要运行 windows 命令 shell 并让其执行 .bat 文件,并且命令 shell 不支持 UNC 路径...解决方法是运行您的命令,例如这个:
cmd.exe /C "pushd \\testserver\someFolderName && test.bat && popd"
本质上,您是在告诉 cmd 提示符将远程文件夹挂载为临时驱动器 (pushd \testserver\someFolderName),运行 test.bat,然后卸载临时驱动器 (popd)。
【讨论】:
这是我们目前正在使用的工作代码:
try {
ProcessBuilder launcher = new ProcessBuilder();
Map<String, String> environment = launcher.environment();
launcher.redirectErrorStream(true);
launcher.directory(new File("\\\\<your remote computer name>\\TIERS\\DEV1\\RP\\VISUAL_BASIC\\"));
environment.put("name", "var");
launcher.command("your.exe");
Process p = launcher.start(); // And launch a new process
} catch (Exception e){
e.printStackTrace();
}
【讨论】:
它也适用于java,如下所示:
Process p1 = Runtime.getRuntime().exec("cmd.exe /C pushd \\yourserver\yourfolderpath && yourexecutable.bat && popd");
【讨论】: