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

3

我正在尝试在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();

}  

执行命令行时,calc已经启动,但日志部分不起作用。日志文件psexecOut.txt未被创建。
在cmd中正常运行命令(没有转义字符)时,它可以正常运行并创建日志文件,但是在Java中使用它时,它不会创建日志文件。
我怀疑>需要被转义,但据我所知,它已经被转义了。
如何使用Java在单个命令行中执行带有文本文件日志的psexec,就像在Windows控制台中手动执行一样?

你尝试在命令的开头加上 cmd.exe /C 了吗?正是 cmd.exe 解释了 > 重定向。 - lit
哇,谢谢你啊。这就解决了问题!你太棒了。 - Davis8988
2个回答

0

已解决:
正如评论中lit所建议的那样: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();

} 

0

尝试在命令开头加上cmd.exe /C?是cmd.exe解释 > 重定向。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接