2013-07-09 2 views
-1

Я попытался это:Выдача командной строки команды в Java

Process rt = Runtime.getRuntime().exec("cmd /c start C:\\Users\\spacitron\\batchfiles\\mybatch.bat"); 

Но все, что происходит, командная строка появляется на экране.

+1

Каковы ожидаемые результаты? – MadProgrammer

+0

Я подозреваю, что ошибка связана с вашим файлом 'mybatch.bat'. Что происходит, когда вы запускаете 'mybatch.bat' в командной строке? –

+0

Java Devil, когда я дважды нажимаю на mybatch.bat, появляется командная строка и выполняется сценарий. – spacitron

ответ

1

Что касается вашей конкретной проблемы, я бы заподозрил, что аргументы командной строки становятся искалеченными. На самом деле это общая проблема с ошибкой Runtime#exec.

Вместо этого я бы рекомендовал вместо этого использовать ProcessBuilder. Это намного более прощание с параметрами командной строки и гораздо лучше работает с вещами вроде пробелов.

Для exammple ...

MyBatch.bat

@echo от

эхо это тест сообщение

RunBatchCommand

import java.io.IOException; 
import java.io.InputStream; 

public class RunBatchCommand { 

    public static void main(String[] args) { 
     ProcessBuilder pb = new ProcessBuilder("cmd", "start", "/c", "MyBatch.bat"); 
     pb.redirectError(); 
     try { 
      Process p = pb.start(); 
      InputStreamConsumer isc = new InputStreamConsumer(p.getInputStream()); 
      new Thread(isc).start(); 
      int exitCode = p.waitFor(); 

      System.out.println("Command exited with " + exitCode); 
      if (isc.getCause() == null) { 
       System.out.println(isc.getOutput()); 
      } else { 
       isc.getCause().printStackTrace(); 
      } 

     } catch (IOException | InterruptedException exp) { 
      exp.printStackTrace(); 
     } 

    } 

    public static class InputStreamConsumer implements Runnable { 

     private InputStream is; 
     private StringBuilder sb; 
     private IOException cause; 

     public InputStreamConsumer(InputStream is) { 
      this.is = is; 
      sb = new StringBuilder(128); 
     } 

     @Override 
     public void run() { 
      try { 
       int in = -1; 
       while ((in = is.read()) != -1) { 
        sb.append((char) in); 
        System.out.print((char) in); 
       } 
      } catch (IOException exp) { 
       cause = exp; 
       exp.printStackTrace(); 
      } 
     } 

     protected String getOutput() { 
      return sb.toString(); 
     } 

     public IOException getCause() { 
      return cause; 
     } 

    } 
} 

Какой ...

This is a test message 
Command exited with 0 
This is a test message 
Смежные вопросы