したがって、私はを半日過ごしました。肯定的な結果は得られません。私はJava ProcessBuilderをいくつかの引数を使用していくつかの.exeファイルを実行するために使用していますが、ファイルパスにスペースが含まれていて、何とか正しく動作させることができません。私は私のコードは以下の通りですなど他のSOの記事の数をチェックし、エスケープ引用符で囲むコードのようなソリューションを実装し、コマンドと引数でそれを分割している:パスに空白があるとJava ProcessBuilderエラーが発生する
try {
ProcessBuilder pBuilder = new ProcessBuilder(
// Main Command.
"C:\\namewith space\\database\\postgres_db\\bin\\pg_ctl.exe",
// Command Parameters.
"start",
"-D C:\\namewith space\\database\\database",
/*The quotes in the next argument are necessary, the -o stands for 'options' and everything between the quotes are the actual database parameters which to start the Database with.*/
"-o \"-p 15000\"",
"-l C:\\namewith space\\database\\postgres_db\\bin\\postgres_log.txt");
File log = new File("\"C:\\folder\\log.txt\"");
pBuilder.redirectErrorStream(true);
pBuilder.redirectOutput(Redirect.appendTo(log));
Process p = pBuilder.start();
} catch (IOException ex) {
System.out.println("Exception Occurred: " + ex);
}
私がこれまで試してみました:
-
を
- 上記のコード内の各パスを囲みません。問題が発生した場合に備えてエスケープされた引用符で囲みます。
Runtime.getRuntime().exec("full command with/without any/all escaped quotes");
メソッドを使用していますが、SOで検索すると、誰かが、代わりにProcessBuilderを使用するべきだとわかっています。"\"C:\\namewith space\\database\\postgres_db\\bin\\pg_ctl.exe\" start"
- ファイルが所与のパスで100%に位置しているように、ProcessBuilerの最初のコマンド文字列に異なる方法で一緒に上記のコードの部分を追加、私は手でおよびファイルエクスプローラ内のパスを貼り付けることにより、これを確認10回以上。
- コマンドを分割して、コマンドの作業ディレクトリをC:\ namewith space \に設定し、その部分のないargsを追加します。私は入れません(
System.out.println("Exception Occurred: " + ex);
経由)
エラーは次のとおりです。にjava.io.IOException:プログラムを実行することはできません"C:\ namewithスペース\データベース\のpostgres_dbの\ビン\のpg_ctl.exe":ファイル名、ディレクトリ名、またはボリュームラベルの構文が正しくありません。
余分な部品/コードが必要な場合はお知らせください。詳細を提供するために最善を尽くします。
ディレクトリ名を修正したり、スペースを使わずにそのパスへのシンボリックリンクを作成したりするのは、実行可能なオプションですか?それらがあなたの唯一の選択肢であるなら、私は驚かないでしょう。そのエラーメッセージは、Javaからではなく、OSから来ているように見えます。 – dimo414
dirNameの変更はオプションではありません。しかし、コマンドプロンプトに引用符を含めて完全に同じ完全な文をコピー/ペーストすると機能します。 .batファイルに入れても動作します。 syslinkの詳細について教えてください。 – OneBigOwnage
[symlink](https://www.google.com/search?q=windows+symlink)は、ディスク上の別の場所へのポインタに過ぎないファイルです。 – dimo414