Java 어플리케이션에서 배치파일을 실행하려면 어떻게 해야 하나요?
자바 어플리케이션에서 "를 호출하는 배치파일을 실행하고 싶다.scons -Q implicit-deps-changed build\file_load_type export\file_load_type
"
배치 파일도 실행이 안 되는 것 같아요.아이디어가 없어요.
Java에서는 다음과 같은 기능을 사용하고 있습니다.
Runtime.
getRuntime().
exec("build.bat", null, new File("."));
이전에는 Python Sconscript 파일을 실행하고 싶었지만, 그것이 동작하지 않았기 때문에 배치 파일로 스크립트를 호출하기로 결정했지만, 아직 그 방법은 성공하지 못했습니다.
배치 파일은 실행 파일이 아닙니다.이를 실행하려면 응용 프로그램(예: cmd)이 필요합니다.
UNIX 에서는, 스크립트파일은, 파일의 선두에 shebang(#!)이 붙어, 실행할 프로그램을 지정합니다.Windows 의 더블 클릭은, Windows 탐색기에서 실행합니다. CreateProcess
그것에 대해 아무것도 모른다.
Runtime.
getRuntime().
exec("cmd /c start \"\" build.bat");
주의: 의 경우start \"\"
명령어를 입력하면 빈 제목으로 별도의 명령 창이 열리고 배치 파일의 출력이 표시됩니다.또, 「cmd /c build.bat」만으로 동작합니다.이 경우, 필요에 따라서 Java 의 서브 프로세스로부터 출력을 읽어낼 수 있습니다.
스레드 실행 프로세스 시간이 JVM 스레드 대기 프로세스 시간보다 높을 수 있습니다.이 시간은 호출한 프로세스가 처리되는 데 시간이 걸릴 때 발생합니다.waitFor() 명령을 다음과 같이 사용합니다.
try{
Process p = Runtime.getRuntime().exec("file location here, don't forget using / instead of \\ to make it interoperable");
p.waitFor();
}catch( IOException ex ){
//Validate the case the file can't be accesed (not enought permissions)
}catch( InterruptedException ex ){
//Validate the case the process is being stopped by some external situation
}
이렇게 하면 호출 중인 프로세스가 완료될 때까지 JVM이 중지된 후 스레드 실행 스택을 계속 진행합니다.
Runtime runtime = Runtime.getRuntime();
try {
Process p1 = runtime.exec("cmd /c start D:\\temp\\a.bat");
InputStream is = p1.getInputStream();
int i = 0;
while( (i = is.read() ) != -1) {
System.out.print((char)i);
}
} catch(IOException ioException) {
System.out.println(ioException.getMessage() );
}
Process Builder는 외부 프로세스를 실행하는 Java 5/6 방법입니다.
java를 사용하여 배치 파일을 실행하려면...
String path="cmd /c start d:\\sample\\sample.bat";
Runtime rn=Runtime.getRuntime();
Process pr=rn.exec(path);`
이거면 될 거야.
배치 스크립트 실행에 사용되는 실행 파일은 다음과 같습니다.cmd.exe
를 사용합니다./c
flag를 사용하여 실행할 배치 파일의 이름을 지정합니다.
Runtime.getRuntime().exec(new String[]{"cmd.exe", "/c", "build.bat"});
이론적으로 Scons도 이 방법으로 실행할 수 있습니다.다만, 테스트한 적은 없습니다.
Runtime.getRuntime().exec(new String[]{"scons", "-Q", "implicit-deps-changed", "build\file_load_type", "export\file_load_type"});
편집: Amara, 당신은 이것이 효과가 없다고 말합니다.당신이 나열한 오류는 윈도우 박스의 Cygwin 터미널에서 Java를 실행할 때 발생하는 오류입니다.이것이 당신이 하고 있는 일입니까?문제는 Windows와 Cygwin의 경로가 다르기 때문에 Windows 버전의 Java는 Cygwin 경로에서 실행 가능한 스콘을 찾을 수 없다는 것입니다.만약 이것이 당신의 문제라면 제가 더 설명해 드릴 수 있습니다.
Process p = Runtime.getRuntime().exec(
new String[]{"cmd", "/C", "orgreg.bat"},
null,
new File("D://TEST//home//libs//"));
jdk1.5 및 jdk1.6으로 테스트 완료
나한테는 잘 먹혔어. 다른 사람들도 도움이 됐으면 좋겠어. 이걸 얻으려고 며칠 더 애를 썼어.:(
저도 같은 문제가 있었어요.그러나 CMD가 파일을 실행할 수 없는 경우가 있습니다.그 때문에 데스크탑에 temp.bat을 작성하고 다음으로 이 temp.bat에서 파일을 실행하고 다음으로 temp 파일을 삭제합니다.
이것이 더 큰 코드인 것은 알지만 Runtime.getRuntime().exec()조차 실패했을 때 100% 기능했습니다.
// creating a string for the Userprofile (either C:\Admin or whatever)
String userprofile = System.getenv("USERPROFILE");
BufferedWriter writer = null;
try {
//create a temporary file
File logFile = new File(userprofile+"\\Desktop\\temp.bat");
writer = new BufferedWriter(new FileWriter(logFile));
// Here comes the lines for the batch file!
// First line is @echo off
// Next line is the directory of our file
// Then we open our file in that directory and exit the cmd
// To seperate each line, please use \r\n
writer.write("cd %ProgramFiles(x86)%\\SOME_FOLDER \r\nstart xyz.bat \r\nexit");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// Close the writer regardless of what happens...
writer.close();
} catch (Exception e) {
}
}
// running our temp.bat file
Runtime rt = Runtime.getRuntime();
try {
Process pr = rt.exec("cmd /c start \"\" \""+userprofile+"\\Desktop\\temp.bat" );
pr.getOutputStream().close();
} catch (IOException ex) {
Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
}
// deleting our temp file
File databl = new File(userprofile+"\\Desktop\\temp.bat");
databl.delete();
다음은 정상적으로 동작하고 있습니다.
String path="cmd /c start d:\\sample\\sample.bat";
Runtime rn=Runtime.getRuntime();
Process pr=rn.exec(path);
이 코드는 경로 C:/folders/folder에 있는 두 개의 commands.bat을 실행합니다.
Runtime.getRuntime().exec("cd C:/folders/folder & call commands.bat");
import java.io.IOException;
public class TestBatch {
public static void main(String[] args) {
{
try {
String[] command = {"cmd.exe", "/C", "Start", "C:\\temp\\runtest.bat"};
Process p = Runtime.getRuntime().exec(command);
} catch (IOException ex) {
}
}
}
}
@Isha의 anwser를 확장하려면 다음 작업을 수행하여 실행된 스크립트의 반환된 출력(실시간 내에 post-facto가 아님)을 가져옵니다.
try {
Process process = Runtime.getRuntime().exec("cmd /c start D:\\temp\\a.bat");
System.out.println(process.getText());
} catch(IOException e) {
e.printStackTrace();
}
언급URL : https://stackoverflow.com/questions/615948/how-do-i-run-a-batch-file-from-my-java-application
'programing' 카테고리의 다른 글
MySQL: 데이터베이스에 대한 **모든 ** 권한 부여 (0) | 2022.12.20 |
---|---|
웹 페이지에 있는 텍스트 그림을 애니메이션으로 만들려면 어떻게 해야 합니까? (0) | 2022.12.20 |
탭이 아닌 새 창에서 열리는 JavaScript (0) | 2022.12.20 |
C/C++에서 함수 포인터와 데이터 포인터가 호환되지 않는 이유는 무엇입니까? (0) | 2022.12.10 |
운영 환경에서 DEV 모드의 Vue (0) | 2022.12.10 |