2017-12-14 8 views
0

배치 파일을 실행하는 자바 웹 서비스가 있습니다. 내 컨트롤러 수업을 마쳤습니다. 컨트롤러 클래스에는 매개 변수가 있고 변수는 String fileName입니다. 나는 그 기능을 수행하기 위해 fileName을 만들기 위해 코드하는 법을 잘 모른다.자바에서 필요한 기능을 수행하기 위해 URL의 매개 변수를 연결하십시오.

내 코드를 표시 한 다음 fileName이해야 할 일에 대해 설명합니다.

RunBatchFile.java

public ResultFormat runBatch(String fileName) { 

    String var = fileName; 
    String filePath = ("C:/Users/attsuap1/Desktop" + var); 
    try { 
     Process p = Runtime.getRuntime().exec(filePath); 

     int exitVal = p.waitFor(); 

     return new ResultFormat(exitVal == 0); 

    } catch (Exception e) { 
     e.printStackTrace(); 
     return new ResultFormat(false); 
    } 
} 

URL로 http://localhost:8080/runbatchfileparam/test.bat에서 사용자 유형의 TEST.BAT 파일을 실행해야합니다 BatchFileController.java

private static final String template = "Sum, %s!"; 

@RequestMapping("/runbatchfileparam/{param}") 
public ResultFormat runbatchFile(@PathVariable("param") String fileName) { 
    RunBatchFile rbf = new RunBatchFile(); 
    return rbf.runBatch(fileName); 
} 

. 사용자가 test.bat 대신 test123.bat를 입력하면 test123.batch 파일을 실행해야합니다. 따라서 나는 문자열 filePath을 "C:/Users/attsuap1/Desktop/test.bat"으로 코딩 할 수 없으므로 test.bat 파일을 실행할 것입니다. 사용자가 실행하려는 배치 파일을 선택할 수있게하고 싶습니다. 나는 이것을 달성하는 것이 쉽지 않다고 생각하지만 이것은 간단하다고 생각합니다.

String fileName 변수를 연결하여 코드가 수행해야 할 작업을 수행하도록하려면 어떻게해야합니까? 그러나 나는 그들이 원하는 결과를주지 않는 몇 가지 방법을 시도했다.

누군가가 도와 주시면 감사하겠습니다.

+0

는 fileName' '의 값은, 세퍼레이터 ('\ '또는'/ ')로 시작합니까? 그렇지 않다면 "Desktoptest.bat"을 얻기 위해 이름을 경로에 연결합니다. –

+0

나는 그것을 원하지 않는다. 어떻게 변경해야합니까? –

+0

fileName을 원하는 배치 파일을 선택할 수있는 매개 변수로 지정합니다. 이제 두 개의 배치 파일 (test.bat 및 test123.bat)이 있습니다. test.bat 파일을 직접 실행하기 때문에'C :/Users/attsuap1/Desktop/test.bat'로 코딩하고 싶지 않고 매개 변수를 가질 필요가 없습니다. –

답변

1

나는 이미 여기에서 일했다고 생각합니다.

두 가지 방법으로 원하는 배치 파일을 실행할 수 있습니다.

  1. 망가 URL의 PARAM의 "박쥐"를 포함, 는 오히려 당신이 예를 들어, PARAM 얻을 어떤 파일에, 당신의 runBatch() 메소드에 박쥐를 추가 당신이 당신의 URL에 박쥐를 포함 할 경우

    public ResultFormat runBatch(String fileName) { 
    
    String var = fileName; 
    String filePath = ("C:/Users/attsuap1/Desktop/" + var+".bat"); 
    try { 
        Process p = Runtime.getRuntime().exec(filePath); 
    
  2. 그러나, 당신은 스프링이 점을 뒤 파일 이름을 무시하지 않도록 아래 정규식 매핑을 사용해야합니다.

    @RequestMapping("/runbatchfileparam/{param:.+}") 
    public ResultFormat runbatchFile(@PathVariable("param") String fileName) 
    { 
    RunBatchFile rbf = new RunBatchFile(); 
    return rbf.runBatch(fileName); 
    } 
    
+0

이걸 시도해 주셔서 고맙습니다. –

+0

배치 파일이 실행되지 않습니다. 첫 번째 방법을 사용하는 경우 URL에서'http : // localhost : 8080/runbatchfileparam/test123'을'.bat'없이 입력해야합니까? 나는 그것을 시도했지만 여전히 배치 파일이 실행되지 않았다. –

+1

어떤 오류가 나타 났습니까?문자열 filePath = ("C :/Users/attsuap1/Desktop/ 바탕 화면 뒤에"/ "가 있어야합니다. 문자열 filePath = ("C :/Users/attsuap1/Desktop/" – TruckDriver