3

Java アプリから .bat ファイルを実行しようとしています。見つけたすべての方法を試しましたが、どれもうまくいかないようです。

問題は、.bat ファイルへのパスにスペースが含まれていることです。

私は今この方法を使用しているので、Eclipse コンソールで結果を確認できます。

私の実際のコードは次のとおりです。

Runtime rt = Runtime.getRuntime();
String processString = "cmd /c \"" + homeFolder.getAbsolutePath() + SETUP_FILE + "\" \"" + homeFolder.getAbsolutePath() + "\"";
    try {
        Process proc = rt.exec(processString);
    ...
    }

引用符をエスケープせずに引用符をエスケープし、文字列を区切り、String[]スペースで区切られた各コマンドを独自のセルに配置してみました。

{ "cmd", "/c", \"" + homeFolder.getAbsolutePath() + SETUP_FILE + "\" ... };

繰り返しますが、引用符をエスケープしてもしなくても、何も機能しません。

また、配列と文字列の両方へのパスをハードコーディングしてみました。毎回同じ結果。

homeFolder = C:\Users\La bla bla\workspace\ToolMaker\bin\
SETUP_FILE = setup.bat

コマンド全体は次のとおりです。

cmd /c "C:\Users\La bla bla\workspace\ToolMaker\bin\setup.bat" "C:\Users\La bla bla\workspace\ToolMaker\bin"

繰り返しますが、引用符の有無にかかわらず、同じ出力:

Output: 
Error: 'C:\Users\La' is not recognized as an internal or external command,operable program or batch file.

明らかに、私は Windows (7、64 ビット プロフェッショナル) で実行しています。Java 7

以前にこの問題を抱えていたと言う人が何人かいたのを見ましたが、それを回避する方法についての答えが見つかりませんでした.

4

2 に答える 2

8

のバージョンを使用Runtime.exec(String[])しますString[]:

Runtime rt = Runtime.getRuntime();
String[] processCommand = { "cmd", "/c", path };

try
{
    Process proc = rt.exec(processCommand);
    // ...
}

これは私にとってはうまくいきます(Win7):

Runtime rt = Runtime.getRuntime();
String[] processCommand = { "cmd", "/c", "c:" + File.separatorChar + "dir with spaces" + File.separatorChar + "test.bat" };

System.out.println("xPATH: " + processCommand[2]);

Process p = rt.exec(processCommand);
// output of the command is as expected

これは、\明示的に使用した場合にも機能します。

String[] processCommand = { "cmd", "/c", "c:\\dir with spaces\\test.bat" };
于 2012-08-06T00:25:33.743 に答える
0

同様の問題がありましたが、startパラメーターを使用していたため、「正確に」同じ問題ではない可能性があります。

cmd拡張されたディレクトリ名が好きではありません (個人的に理由はわかりませんが、そうでないことはわかっています)。代わりに「短縮された」(8.2)名前が必要になります

つまりwallpaper.jpg、なる必要がありますWALLPA~1.JPG

ここで、問題が発生します。多数のwallpaper*.*ファイルがある場合、どのファイルが必要ですか??

これを Windows で適切に動作させるには、ネイティブ レベルにまで下げる必要があります。

GetShortPathName基本的に「長い名前」(パスとファイル名)を指定すると、「短い名前」が生成されるというWindows関数(およびそのバリアント)があります。

于 2012-08-06T00:26:20.780 に答える