6

Javaとは別にコマンドライン操作の実行をテストするための非常に単純なプログラムを作成しました。つまり、後で、「move」を使用して、コマンドラインに入力できる他のコマンド(他のJava以外のソフトウェアの呼び出しを含む)にこのコードを変更できるようにしたいのです。

私はおそらく20の答えを検索して読みましたが、それらはすべて、これを正しく試していることを示唆しているか、単純なテストとは無関係であるか、または機能しない他の解決策を提案しました(.exec(String [])メソッドの代わりに使用するなど)。 exec(String)-同じ結果です!)。

これが私のコードです:

import java.io.IOException;

public class RunCommand {

private static final String PATH_OUT = "C:\\Users\\me\\Desktop\\Temp\\out\\";
private static final String FILE = "sample.txt";
private static final String PATH_IN = "C:\\Users\\me\\Desktop\\Temp\\in\\";

public static void main(String[] args) {
    try {
        String command = "move "+PATH_IN+FILE+" "+PATH_OUT;
        System.out.println("Command: "+command);
        Runtime.getRuntime().exec(command);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

実行すると出力が表示されます。

Command: move C:\Users\myingling\Desktop\CDS\Temp\in\sample.txt C:\Users\myingling\Desktop\CDS\Temp\out\
java.io.IOException: Cannot run program "move": CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessBuilder.start(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at java.lang.Runtime.exec(Unknown Source)
at RunCommand.main(RunCommand.java:13)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
at java.lang.ProcessImpl.create(Native Method)
at java.lang.ProcessImpl.<init>(Unknown Source)
at java.lang.ProcessImpl.start(Unknown Source)
... 5 more

コマンドをコピーしてコマンドプロンプトウィンドウに貼り付けると、ファイルは正常に移動することに注意してください。

私は何が欠けていますか?私が読んだ他のすべての質問は、これが機能するはずであることを示しているようです。

ありがとう!

編集は今動作します、みんなの助けに感謝します!「move」がcmd.exeのパラメータである方法が隠されているのは面倒です。コピー/貼り付け時に機能する場合は、.exec()メソッドを呼び出したときに機能するようになっているといいのですが。しかたがない。

4

4 に答える 4

6

「move」コマンドはcmd.exeインタープリターの一部であり、それ自体では実行可能ファイルではありません。

これはうまくいくでしょう:

cmd.exe /c move file1 file2 
于 2012-10-29T18:28:39.487 に答える
3

これを試して:

 Runtime.getRuntime().exec("cmd.exe /c move "+PATH_IN+FILE+" "+PATH_OUT);
于 2012-10-29T18:34:47.933 に答える
2

Windowsでは、UNIXとは異なり、moveは別個のプログラムではありません。引数としてmoveを使用してコマンドプロセッサCMDを呼び出す必要があります。CMDのコマンドラインヘルプを読んでください。設定する必要のあるフラグがあります。

于 2012-10-29T18:29:28.207 に答える
0

move実際にはプログラムではなく、シェルビルトインコマンドです。次のようなものを使用します:

String command = PATH_TO_SYSTEM32 + "\\cmd.exe /c move \""+PATH_IN+FILE+"\" \""+PATH_OUT + "\"";

外部プログラムには常に絶対パスを使用することをお勧めします。(この場合の良い習慣は、プラットフォームに依存するシェル呼び出しの代わりにFiles.moveまたは同等のものを使用することです)

于 2012-10-29T18:33:56.857 に答える