2016-10-25 2 views
0

Работаю под операционной системой Windows 8.1. Внутри у меня есть файл .bat под названием test.bat, который просто выполняет эхо-команду:Пакет (.bat), вызываемый с Java, не полностью выполняется

echo "123" > output.txt 

Всякий раз, когда я запускаю файл из командной строки (cmd.exe), он создает текстовый файл вывода. txt, где записано «123» (я предполагаю, что файл не существует каждый раз, когда для простоты вызывается .bat).

. Байт работает нормально каждый раз, когда я вызываю его из командной строки, но когда я пытаюсь вызвать его из исходного кода Java, .bat не выполняется, хотя код работает нормально (или, похоже, потому что не отображается предупреждение или код ошибки).

Мой исходный код Java идет как это:

import java.io.*; 
    import java.util.*; 

    public class HelloWorld { 

     public static void main(String[] args) throws InterruptedException{ 
     try 
     { 
      List<String> command_args = Arrays.asList("cmd.exe", null , " "test. 
      File dir = new File("C:\\Users\\Administrador\\workspace\\test\\src\\test"); 
      String[] files = dir.list(); 
      Runtime.getRuntime().exec("cmd /c test.bat", null, new File("C:\\Users\\Administrador\\workspace\\test\\src\\test")); 
      if(files.length == 0) 
      { 
       System.out.println("Empty dir"); 

      } 
      else 
      { 
       for(String f: files) 
       { 
        System.out.println(f);  
       }  
      } 

      ProcessBuilder pb = new ProcessBuilder(command_args); 
      pb.directory(dir); 
      Process proc = pb.start(); 
      //int error = proc.waitFor(); 
     } 
     catch(IOException ioe) 
     { 
      ioe.printStackTrace(); 
     } 
    } 
} 

Файл называется HelloWorld.java и находится внутри маршрута C: \ Users \ Administrador \ рабочее пространство \ Test \ SRC \ тест. Некоторые строки кода используются для отображения содержимого каталога, на который ссылается переменная dir, которая действительно указывает на правый каталог, поскольку вывод кода показывает файлы внутри каталога (как HelloWorld.java, так и test .летучая мышь).

Если я запустил код, он правильно печатает содержимое каталога и, похоже, выполняет 100% кода, но файл output.txt не создается каждый раз, когда я запускаю код Java. Я пытаюсь использовать два разных способа запуска .bat с Java, используя ProcessBuilder и непосредственно из Runtime, но ни один из них не получает ожидаемого результата.

Знаете ли вы, возможно ли полностью запустить этот вид .bat с Java или если мне нужно использовать для этого определенную библиотеку?

Заранее благодарен.

+0

если открыть командную строку и введите CMD/с test.bat это работает? если это так, возможно, рабочий каталог не установлен правильно, возможно, начните с выполнения dir и посмотрите, показывает ли он test.bat –

+0

@TheresaForster yes, он выполняет файл .bat. Я также использую метод list() из класса File в Java, чтобы отобразить все содержимое каталога, в котором я пытаюсь вызвать .bat. Он печатает все файлы, как ожидалось, поэтому я считаю, что каталог настроен правильно. Конечно, я ошибаюсь, но как доказать, что это выходит за рамки моих текущих знаний Java. – addictedtohaskell

+0

Попробуйте запустить cmd/c dir. что показывает? –

ответ

0

код i show.it хорошо работает.

Наиболее важным является то, что вы должны прочитать inputStream, если вы этого не сделаете, это может не сработать.

waitFor() выполнить основной процесс до завершения работы .bat.

echo helloworld >>f:/2.txt 
exit 

в е: /hello.bat

Process p; 
    String cmd="cmd /c start f:\\hello.bat"; 
    try { 

     p = Runtime.getRuntime().exec(cmd); 
     InputStream in = p.getInputStream(); 
     int c; 
     while ((c = in.read()) != -1) { 
       System.out.print(c); 
     } 
     in.close(); 
     try { 
       p.waitFor(); 
     } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
     } 
     System.out.println("done"); 

    } catch (IOException e) { 
     System.out.println("play show error"); 
    }