ProcessBuilderにはコマンドの制限がありますか?ProcessBuilderのコマンドの制限?
私はこのコマンドの配列があります
protected String[] cmd = {
"dism /mount-wim /wimfile:boot.wim /index:2 /mountdir:mount",
"dism /image:mount /add-driver:\"driver\" /recurse",
"dism /unmount-wim /mountdir:mount /commit",
"dism /mount-wim /wimfile:install.wim /index:" + formPanel.getOsIndex() + " /mountdir:mount"
};
をそしてこれが私ProcessBuilderを次のとおりです。
ProcessBuilder pb = new ProcessBuilder(
"cmd.exe", "/c", cmd[0] + " && " + cmd[1] + " && " + cmd[2] + " && " + cmd[3] + " && " + cmd[1] + " && " + cmd[2]
);
しかし、私はそれを実行すると、それは「& &が、現時点では予想外だった」と言います。プロセスビルダを次のように変更した場合:
ProcessBuilder pb = new ProcessBuilder(
"cmd.exe", "/c", cmd[0] + " && " + cmd[1] + " && " + cmd[2]
);
次に正常に動作します。
私の質問は基本的に、単一のプロセスビルダが通過できるコマンドの数に制限がある場合だけですか?
@Override
protected Integer doInBackground() {
try {
ProcessBuilder pb = new ProcessBuilder(
"cmd.exe", "/c", cmd[0] + " && " + cmd[1] + " && " + cmd[2] + " && " + cmd[3] + " && " + cmd[1] + " && " + cmd[2]
);
pb.directory(new File(formPanel.workspaceDir.toString()));
pb.redirectErrorStream(true);
Process p = pb.start();
String s;
BufferedReader stdout = new BufferedReader(new InputStreamReader(p.getInputStream()));
while((s = stdout.readLine()) != null && !isCancelled()) {
publish(s);
System.err.println(s);
}
if(!isCancelled()) {
status = p.waitFor();
}
p.getInputStream().close();
p.getOutputStream().close();
p.getErrorStream().close();
p.destroy();
} catch(IOException | InterruptedException ex) {
ex.printStackTrace(System.err);
}
return status;
}
私は実際のコードではなく、コマンドに何か問題があるのかどうか疑問を始めています:
は、ここに私のSwingWorkerの方法の全体のセグメントです。
私はそれが動作しませんが、私は個人的に=新しいArrayListを<>()コマンドを作成する理由の制限はcmd.exeの –
イムわからないとだと思います。 pb.command(コマンド)を実行します。なぜcmd.exeが最初の場所にあるのですか?あなたがいつでもpb.start();コマンドを実行するには十分ではありませんか?また、pb.directory(新しいファイル(yourWorkingDir))で作業ディレクトリを指定します。 – LazerBanana
@Krystian_Kコマンドはcmd.exe固有のコマンドです –