如何使用JAVA执行psexec的cmd行并在一行中记录到文本文件?

时间:2017-09-22 09:01:19

标签: java cmd

我正在尝试在java中执行以下行(使用转义字符):

"psexec -i -d \\\\computerName -u user -p pass calc 2>  
 somePath\\psexecOut.txt"    

我使用以下方法执行cmd行:

private static String executeCommand(String command) {

    StringBuffer output = new StringBuffer();
    System.out.println("command is = \n"+command);
    Process p;
    try {
        p = Runtime.getRuntime().exec(command);
        p.waitFor();
        BufferedReader reader =
                           new BufferedReader(new InputStreamReader(p.getInputStream()));

                       String line = "";
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return output.toString();

}  

执行该行并开始计算,但日志部分不起作用。未创建日志文件psexecOut.txt

当我在cmd中正常运行命令(没有excaped字符)时,它运行正常并且创建了日志文件,但是使用java它不会创建日志文件。

我怀疑>需要被转义,但是当我读到它时,它已经被转义了。

如何使用java在单个cmd行中使用日志到文本文件执行psexec,就像我可以在Windows控制台中手动执行一样?

2 个答案:

答案 0 :(得分:0)

解决


正如评论中所建议的那样:cmd.exe /c有效。

所以纠正的方法是:

private static String executeCommand(String command) {

    StringBuffer output = new StringBuffer();
    System.out.println("command is = \n"+command);
    Process p;
    try {
        p = Runtime.getRuntime().exec("cmd.exe /c "+command); // <-correction done here
        p.waitFor();
        BufferedReader reader =
                           new BufferedReader(new InputStreamReader(p.getInputStream()));

                       String line = "";
        while ((line = reader.readLine())!= null) {
            output.append(line + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
    }

    return output.toString();

} 

答案 1 :(得分:0)

尝试将cmd.exe / C放在命令的开头?是cmd.exe解释&gt;重定向。

"cmd.exe /C psexec -i -d \\\\computerName -u user -p pass calc 2> somePath\\psexecOut.txt"