请看下面的代码
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);
它打开命令窗口,但打开后没有传入字符串。有人能告诉我为什么这段代码不会将字符串放入命令窗口吗?
请看下面的代码
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);
它打开命令窗口,但打开后没有传入字符串。有人能告诉我为什么这段代码不会将字符串放入命令窗口吗?
The option /C means: Carries out the command specified by the string and then terminates.
So the other command is handled as a separated one.
使用OutputStreamWriter
并写入所创建进程的输入流。
Process p = Runtime.getRuntime().exec("cmd /K start") ;
Writer w = new java.io.OutputStreamWriter(p.getOutputStream());
w.append(yourCommandHere);
另外,使用 /K 的原因:
/K 运行命令,然后返回到 CMD 提示符。
为什么不使用这个:
String[] cmd = { "cmd /c", "LogParser",
"Select top 10 * into c:\temp\test9.csv from application" };
rt.exec(cmd);
在此处exec
查找有关该方法的更多信息。
您首先需要像在前两行代码中一样启动一个进程,但不要使用start
,因为这会产生一个单独的进程并立即返回。使用 justLogParser
代替,或者任何可以使您的LogParser
过程开始而不涉及cmd
. 之后,您需要检索由创建OutputStream
的Process
对象exec
并将您的select
命令写入其中。您还需要从Process
s中读取InputStream
以查看响应。这些都不会在单独的命令提示符窗口中可见;您需要通过 Java 处理所有内容,并且还涉及一些多线程。
正如我在评论中所说的那样——“它们作为单独的命令执行,它们并不相关,只是因为你在另一个之前执行了一个”
从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);
没有测试,因为我没有窗户,但它应该与此类似。