13

ProcessBuilderを使用して次のコマンドを作成する必要があります。

"C:\Program Files\USBDeview\USBDeview.exe" /enable "My USB Device"

私は次のコードで試しました:

ArrayList<String> test = new ArrayList<String>();
test.add("\"C:\\Program Files\\USBDeview\\USBDeview.exe\"");
test.add("/enable \"My USB Device\"");  

ProcessBuilder processBuilder = new ProcessBuilder(test);                       
processBuilder.start().waitFor();   

ただし、これにより、以下がシステムに渡されます(Sysinternals Process Monitorを使用して確認済み)

"C:\Program Files\USBDeview\USBDeview.exe" "/enable "My USB Device""

/enable前の引用符と後の2つの引用符に注意してくださいDevice。呼び出しが失敗するため、これらの余分な引用符を取り除く必要があります。誰かがこれを行う方法を知っていますか?

4

4 に答える 4

10

私の知る限り、ProcessBuilder はパラメーターをコマンドに渡す方法がわからないため、パラメーターを個別に ProcessBuilder に渡す必要があります。

ArrayList<String> test = new ArrayList<String>();
test.add("\"C:\\Program Files\\USBDeview\\USBDeview.exe\"");
test.add("/enable");
test.add("\"My USB Device\"");
于 2012-08-25T19:26:08.863 に答える
5

第一に、引数を自分で分割する必要がありProcessBuilderます - あなたのためにそれをしません - そして第二に、引数値の周りにエスケープされた引用符を置く必要はありません.

ArrayList<String> test = new ArrayList<String>();
test.add("C:\\Program Files\\USBDeview\\USBDeview.exe");
test.add("/enable");
test.add("My USB Device");

単語を引数に分割する方法を cmd パーサーに伝えるために、コマンド ラインで引用符が必要ですが、ProcessBuilder事前に分割された引数が既に与えられているため、引用符は必要ありません。

于 2013-08-07T07:54:15.720 に答える