Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.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批处理文件_Java_Batch File_Processbuilder_Psexec - Fatal编程技术网

在远程服务器上运行Java批处理文件

在远程服务器上运行Java批处理文件,java,batch-file,processbuilder,psexec,Java,Batch File,Processbuilder,Psexec,我正在尝试使用Java与一个大型批处理文件接口,该文件使用psexec在远程服务器上执行命令 我可以使用process builder启动该文件,它可以很好地用于大多数命令,但似乎挂断了 批处理文件中的一个特定命令如下所示: ECHO . Echo Which would you like to reboot? Echo 1-10. For computers, enter computer number. Echo E. Exit set /p userinp=choose a number(

我正在尝试使用Java与一个大型批处理文件接口,该文件使用psexec在远程服务器上执行命令

我可以使用process builder启动该文件,它可以很好地用于大多数命令,但似乎挂断了

批处理文件中的一个特定命令如下所示:

ECHO .
Echo Which would you like to reboot?
Echo 1-10. For computers, enter computer number.
Echo E. Exit
set /p userinp=choose a number(0-22):
但是从Java我得到: . 您想重新启动哪个? 1-10. 对于计算机,输入计算机编号。 E.出口

然后它就挂了

它显然没有读取设置行,但更重要的是,我还没有弄清楚如何将输入传递回子流程

String[] command = {"cmd", "/c", "batchfile", "restart"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\"));
    Process process = builder.start();

InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }

任何输入都将不胜感激。

您的批处理作业要求您实际提供输入才能继续,这就是它看起来“挂起”的原因。您需要通过流程的输出流将此输入提供给流程。高度简化的示例:

PrintWriter writer = new PrintWriter(process.getOutputStream());
writer.println("10");
writer.flush();

您的进程没有挂起,它只是在命令行等待一些输入,然后再继续

当您通过
process.getInputStream()
读取进程的输出时,您可以使用将输入发送回进程

公共抽象OutputStream getOutputStream()

获取子流程的输出流。流的输出通过管道传输到由该流程对象表示的流程的标准输入流中。 实现说明:最好对输出流进行缓冲

返回: 连接到子流程正常输入的输出流

String[] command = {"cmd", "/c", "batchfile", "restart"};
ProcessBuilder builder = new ProcessBuilder(command);
builder.directory(new File("C:\\"));
    Process process = builder.start();

InputStream is = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(is);
    BufferedReader br = new BufferedReader(isr);

    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }