0

次のコードでJDK7u25を使用してcmdファイルを実行しようとしています:

try {
            ProcessBuilder pb = new ProcessBuilder(cmd);
            pb.directory(workingDir);
            proc = pb.start();
        } catch (IOException e) {
            System.out.println(e.getMessage());
            throw e;
        }
        // StdOut and Err Stream must be read immediatly even if they are not used

        // any error message?
        StreamInlet error = new StreamInlet(proc.getErrorStream(), "ERROR");

        // any output?
        StreamInlet output = new StreamInlet(proc.getInputStream(), "OUTPUT");

        // kick them off
        error.start();
        output.start();

        if (wait) {
            try {
                exitCode = proc.waitFor();
            } catch (InterruptedException e) {
                System.out.println("Waiting for process was interrupted");
            }
            if (addMetaInfo)
                System.out.println("Return value = " + exitCode);
        }

どこcmd=[cmd.exe, /c, C:\My Root\scripts\windows\tools\MyCLI.cmd, -c, C:\Local Disk D\My Tutorial\RegressionTests.xml, -d, 02_RecordViewer_Test, -l"ERROR"]

しかし、それは機能せず、次の出力が得られます。

「C:\My」は内部コマンドまたは外部コマンドとして認識されません。

操作可能なプログラムまたはバッチ ファイル。

cmdファイルを呼び出す前に、明示的な「CMD.EXE /C」を追加することにより、 JDK7U21の問題に必要な変更を既に行っています。また、JDK7u21 の問題で述べたように、ProcessBuilder クラスも使用しています。

実行しようとしている cmd ファイルが C:\MyRoot 、つまり名前にスペースが含まれていないフォルダーに配置されている場合、正常に動作します。

誰か助けてくれませんか?

4

3 に答える 3

3

必要に応じて、パスを引用符で囲む必要がありますcmd

String[] cmd = {"cmd.exe", "/c", "\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....};

チャットで話し合ったように更新ProcessBuilderすると、問題はパラメーターを に渡すことのようcmd.exeです。ただし、実行可能ファイルへの完全なパスがあるため、実際にcmd.exeはまったく必要ありません。したがって、コマンドは次のようになります。

String[] cmd = {"\"C:\\My Root\\scripts\\windows\\tools\\MyCLI.cmd\"", "-c", "\"C:\\Local Disk D\\My Tutorial\\RegressionTests.xml\"",.....};
于 2013-08-16T12:18:57.680 に答える
1

この問題は JDK7u25 ですでに対処されていることに気付きました。リリースノートで見つけました。

于 2013-08-19T17:36:42.477 に答える
0

バックスラッシュをスラッシュに変更して、スペースをエスケープしたくなるでしょう。

C:/My\ Root/scripts/windows/tools/MyCLI.cmd
于 2013-08-16T12:21:52.373 に答える