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

オプション/Cの意味は次のとおりです。Carries out the command specified by the string and then terminates.

したがって、他のコマンドは別のコマンドとして扱われます。

于 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

私のコメントで言ったように-'それらは別々のコマンドとして実行されます、あなたが他の前に実行したという理由だけでそれらは関連していません'

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 に答える
0

最初に、コードの最初の2行で行うのと同じようにプロセスを開始する必要がありますstartが、別のプロセスを生成してすぐに戻るため、使用しないでください。LogParser代わりに使用するか、またはを使用LogParserせずにプロセスを開始するものを使用してくださいcmd。その後、によって作成されOutputStreamProcessオブジェクトを取得し、それにコマンドをexec書き込む必要があります。また、応答を確認するには、からselect読み取る必要があります。これはいずれも、別のコマンドプロンプトウィンドウには表示されません。Javaを介してすべてを処理する必要があり、マルチスレッドも必要になります。ProcessInputStream

于 2013-02-22T14:25:44.773 に答える
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 に答える