Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

execでDOSコマンド

レベルの低い質問ですいません。プログラムに関する知識が徹底的に不足していて質問させて頂きました。

execでMS-DOS(あるいはcygwin)にコマンドを送ろうとするのですが、うまくいきません。MS=DOSは一度は標準出力でウィンドウは開かれてないものの起動だけなら確認できてはいます。
コマンドを送ろうとして、String コマンド= で宣言
Runtime .getRuntime().exec(コマンド);で送っているのですが
以下のエラーになりました。
cygwinに関しては起動するだけで同様のエラーになり解決できません。
execからDOSコマンドを利用する為にはどうすればいいのでしょうか?ご助言宜しくお願いします。


java.io.IOException: CreateProcess: cd UserData error=2
    at java.lang.ProcessImpl.create(Native Method)
    at java.lang.ProcessImpl.<init>(Unknown Source)
    at java.lang.ProcessImpl.start(Unknown Source)
    at java.lang.ProcessBuilder.start(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at java.lang.Runtime.exec(Unknown Source)
    at onsei.execSSM.main(execSSM.java:26)

2

回答

7553

閲覧

2件の回答

評価

0

こんにちわ。

 Runtime#execが実行できるのは *.exe だけだそうで、
 おそらく、DOSの標準コマンド(DIR、CD...)は
 CMD /C コマンド で実行するそうです。

 詳しくは、こちら↓

 ttp://javafaq.jp/#S103

P.S
 Java上で「CD」を発効しても、JVM終了時に元にもどるとおもうのですが。
 移動先ディレクトリで何がしたいのかわかりませんが、
 ディレクトリ名がわかっているのであれば、File 等 java.io パッケージでダイレクト指定してやれば
 操作が自由になるかと。
 
 それでは。
 

評価

0

>Java上で「CD」を発効しても、JVM終了時に元にもどるとおもうのですが。
Runtime#exec()では、Java本体のカレントディレクトリは変わりません。
あくまでもコマンドを実行している子プロセスの、カレントディレクトリが変わるだけです。

try {
    Runtime.getRuntime().exec("cd c:\\");
} catch (IOException e) {}
System.out.println(new File(".").getAbsolutePath());

こんな感じで分かります。


元の質問に関しては、DOSプロンプトで何をしたいのかが分からないので、Javaで代替できるかどうか分かりません。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。