2012-08-06 5 views
3

Java 응용 프로그램에서 .bat 파일을 실행하려고합니다. 찾을 수있는 모든 방법을 시도했지만 아무 것도 작동하지 않는 것 같습니다.공백이 포함 된 Java 실행 명령 줄

문제는 공백이 들어있는 .bat 파일의 경로입니다.

나는 내가

내 실제 코드는 내 이클립스 콘솔에서 결과를 볼 수 있습니다 지금 this 방법을 사용하고

: 나는 따옴표를 이스케이프하지 않고, 따옴표를 이스케이프와 시도했습니다

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

을, 로하고 견적을 탈출하지 않고, 다시

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

: String[]로 문자열을 분리하고 각각의 공간을 배치하는 명령을 자신의 세포를 분리 아무것도 작동하지 않습니다.

또한 배열과 문자열에 대한 경로를 하드 코딩 해 보았습니다. 매번 같은 결과가 나타납니다.

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. 

나는 윈도우 (7, 64 비트 전문에 실행 해요). Java 7

몇 명의 사람들이 이전에 이러한 문제가 있다고 말한 것을 보았지만 그 문제를 해결하는 방법에 대한 답을 찾을 수 없었습니다.

+0

공백 문자를 인코딩하려 했습니까? – dantuch

+0

UTF-8을 사용하여 전체 문자열을 인코딩하려고했습니다. 그게 무슨 뜻인지 모르겠다. –

답변

8

사용하십시오 String[] 소요 Runtime.exec(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" }; 
+0

아니. 같은 결과 .. –

+0

정말,이 테스트는 문제없이'Process proc = Runtime.getRuntime(). exec (new String [] { "cmd", "/ c", "dir", "C :/Program Files (x86) "});' – MadProgrammer

+0

코드를 복사하여 붙여 넣었고 어떤 이유로 작동했는데 배열에"runas ","/ user : administrator "를 추가하면 더 오래 작동합니다. 관리자로 배치를 실행해야합니다. –

0

비슷한 문제가 있었지만 사용하고있었습니다. start 매개 변수이므로 "정확하게"동일한 문제가 아닐 수도 있습니다.

cmd 확장 된 디렉토리 이름이 마음에 들지 않습니다 (개인적으로 왜 그런지 모르겠다). 그것은 "단축"원하는 여기 WALLPA~1.JPG

, 당신은 문제로 실행 될 필요가 wallpaper.jpg 의미 대신

(8.2) 이름이됩니다. wallpaper*.* 개의 파일을 가지고 있다면 어떻게 될까요?

이제 Windows에서 제대로 작동하려면 기본 수준으로 낮춰야합니다.

기본적으로 "긴 이름"(경로 및 파일 이름)이 주어지면 GetShortPathName (및 그 변형)이라는 Windows 기능이있어서 "짧은 이름"이 생성됩니다.

+0

전체 명령을 복사하여 cmd에 붙여 넣으면 작동합니다 ..이 기능을 살펴 보겠습니다. –