5

请看下面的代码

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);

它打开命令窗口,但打开后没有传入字符串。有人能告诉我为什么这段代码不会将字符串放入命令窗口吗?

4

5 回答 5

2

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.

于 2013-02-22T14:11:11.847 回答
1

使用OutputStreamWriter并写入所创建进程的输入流。

Process p = Runtime.getRuntime().exec("cmd /K start") ;
Writer w = new java.io.OutputStreamWriter(p.getOutputStream());
w.append(yourCommandHere);

另外,使用 /K 的原因:

/K 运行命令,然后返回到 CMD 提示符。

参考:http ://ss64.com/nt/cmd.html

于 2013-02-22T14:14:08.293 回答
0

为什么不使用这个:

String[] cmd = { "cmd /c", "LogParser",
        "Select top 10 * into c:\temp\test9.csv from application" };
rt.exec(cmd);

在此处exec查找有关该方法的更多信息。

于 2013-02-22T14:20:33.883 回答
0

您首先需要像在前两行代码中一样启动一个进程,但不要使用start,因为这会产生一个单独的进程并立即返回。使用 justLogParser代替,或者任何可以使您的LogParser过程开始而不涉及cmd. 之后,您需要检索由创建OutputStreamProcess对象exec并将您的select命令写入其中。您还需要从Processs中读取InputStream以查看响应。这些都不会在单独的命令提示符窗口中可见;您需要通过 Java 处理所有内容,并且还涉及一些多线程。

于 2013-02-22T14:25:44.773 回答
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);

没有测试,因为我没有窗户,但它应该与此类似。

于 2013-02-22T14:13:57.463 回答