• ベストアンサー

外部コマンドを実行する方法

sdk 1.4.2_08 OS WindowsXp try{ Process process = Runtime.getRuntime().exec(...); }catch(IOException e){} を使用して,コマンドを実行しようとしています.しかし,IOExceptionとなってしまいます. exec(...) に記述してある内容をコピーして,コマンドラインから実行できることは確認しましたし,パスも大丈夫でした. また空白が認識されない場合があることから, String cmd[] = {"コマンド","引数1","引数2"}; Process process = Runtime.getRuntime().exec(cmd); と行ってもダメでした. また,ためしにこのコンパイル済みのclassファイルをLinuxで動作させたところ,正常の動作できることがが確認できました.(windowsとLinuxに同じ名前のコマンドがあるのです.また,Linuxは fedora core4 です.) Windows上のコマンドに問題があるようなのですが,何か原因となる要因が,他にもありそうでしたらアドバイスお願いいたします.

質問者が選んだベストアンサー

  • ベストアンサー
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.3

ちょっと検索してみただけで確信ないですけど、mknmzってperlスクリプトじゃないですか。 LinuxはともかくWindowsにはperlスクリプトをプロセスとして起動する機能はないですよ。 Windowsでは起動するプログラムはperlにして、その引数としてmknmzを指定するようにすればどうですか。

panero
質問者

お礼

ありがとうございます. namazuを使う際に,コマンドからは namazu というコマンドと mknmz という2つのコマンドがありますが, mknmzだけがperlスクリプトでした. windowsではbatファイルになっているために,javaから実行できなかったようです.そこで,拡張子 bat をpl に変更し,以下のようにコマンドを実行することで解決できました.ありがとうございます. "perl c:\namazu\bin\mknmz.pl -aO c:\namazu\index c:\pdf"

その他の回答 (2)

  • PCFREAK
  • ベストアンサー率51% (417/805)
回答No.2

Windows環境でmknmzへのPATHが通ってないのでしょう。 runtime.exec("c:\namazu\mknmz ....") と絶対パス指定するのが一番確実です。

panero
質問者

補足

ありがとうございます. 質問にも書きましたがPATHの確認はとってあります.また,ご指摘の通りにしてみても出来ないという確認もとってあります. なんでなんでしょう・・・.

  • Bonjin
  • ベストアンサー率43% (418/971)
回答No.1

IOExceptionのメッセージは何と出てますか?

panero
質問者

補足

すいません. 実行しようとしているコマンドは,内部コマンドではないコマンドです. 具体的には,namazu という検索エンジンのindex作成をを,javaから行おうとしており, "mknmz -aO c:\namazu\index c:\pdf" です. そのため,具体的なエラーは java.io.IOException: CreateProcess: mknmz -aO c:\namazu\index c:\pdf error=2 です. 宜しくお願いします.