请参阅以下代码
Runtime rt = Runtime.getRuntime();
rt.exec("cmd /c start");
String[] cmd = {"LogParser", "Select top 10 * into c:\temp\test9.csv from application" };
rt.exec(cmd);
它会打开命令窗口,但打开后不会传入字符串。有人能告诉我为什么这段代码不会将字符串放入命令窗口吗?
答案 0 :(得分:2)
选项 / C 表示:Carries out the command specified by the string and then terminates.
所以另一个命令作为一个独立的命令处理。
答案 1 :(得分:1)
使用OutputStreamWriter
并写入创建过程的输入流。
Process p = Runtime.getRuntime().exec("cmd /K start") ;
Writer w = new java.io.OutputStreamWriter(p.getOutputStream());
w.append(yourCommandHere);
另外,使用/ K的原因:
/ K运行命令,然后返回CMD提示符。
答案 2 :(得分:0)
正如我在评论中所说的那样 - '它们是作为单独的命令执行的,它们只是因为你在另一个之前执行了它们而不相关'
来自Runtime.exec( string )
javadoc -
在单独的进程中执行指定的命令和参数。
您需要将命令链接在一起以使cmd
处理您的命令,我相信您需要使用\k
标志来指定您需要在命令行上执行哪些命令。
Runtime rt = Runtime.getRuntime();
String start = "cmd /k ";
String cmd = "LogParser;\n" Select top 10 * into c:\temp\test9.csv from application";
rt.exec(start + cmd);
没有测试,因为我没有窗户,但它应该与此类似。
答案 3 :(得分:0)
为什么不使用它:
String[] cmd = { "cmd /c", "LogParser",
"Select top 10 * into c:\temp\test9.csv from application" };
rt.exec(cmd);
查找有关exec
方法here的更多信息。
答案 4 :(得分:0)
您首先需要像前两行代码一样启动流程,但不要使用start
,因为它会生成一个单独的流程并立即返回。仅使用LogParser
代替LogParser
进程,而不涉及cmd
。之后,您需要检索由OutputStream
创建的Process
对象的exec
,并将select
命令写入其中。您还需要阅读Process
s InputStream
以查看回复。在单独的命令提示符窗口中,这些都不可见;你需要通过Java处理所有内容,它也会涉及一些多线程。