将字符串传递给Windows命令行

时间:2013-02-22 14:05:55

标签: java command-line process runtime.exec

请参阅以下代码

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

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

5 个答案:

答案 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提示符。

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

答案 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处理所有内容,它也会涉及一些多线程。