我正在尝试在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控制台中手动执行一样?
答案 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"