# exec() und Batchdateien



## tobias_petry (31. März 2007)

Hallo ich habe das Problem, dass ich zu einer batch-Datei gerne ein GUI schreiben möchte, diese Batch-Datei beruht auf Ein- und Ausgaben.
Nun ist es aber so, dass bei Batch-Dateien mit Eingaben die Batch-Datei sich wirklich öffnet, was von mir eigentlich nicht geplant ist, dies würde ich gerne über die Streams lösen.
Habe ich in meinem Code nen krassen Denkfehler oder fehlt mir irgendwas? Die Forensuche hat leider nur grunsätzliche Probleme ausgespuckt.


```
package com0com.lib;

import java.io.InputStream;

public class Test {
	public static void main(String[] args) throws Exception {
    	Process process =  Runtime.getRuntime().exec("cmd /c setup.bat");
    	InputStream in=process.getInputStream();
    	int input;
		while((input=in.read())!=-1){
    		System.out.print(input);
    	}
        process.waitFor();
	}
}
```


----------



## Thomas Darimont (31. März 2007)

Hallo,

also die Stdout - Ausgabe eines Prozesses würde ich so auslesen:

```
/**
 * 
 */
package de.tutorials;

import java.io.File;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * @author Tom
 */
public class BatchOutputCaptureExample {

  /**
   * @param args
   */
  public static void main(String[] args) throws Exception {
    ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "ant");
    processBuilder.directory(new File("c:/temp"));

    final Process process = processBuilder.start();
    ExecutorService executorService = Executors.newSingleThreadExecutor();
    executorService.execute(new Runnable() {
      public void run() {
        Scanner scanner = new Scanner(process.getInputStream());
        while (scanner.hasNextLine()) {
          System.out.println(scanner.nextLine());
        }
        scanner.close();
      }
    });

    System.out.println(process.waitFor());
    executorService.shutdown();
  }
}
```

Ausgabe (bei einem ant build-skript das nur compiliert...)

```
Buildfile: build.xml

compile:

default:
     [echo] Finished

BUILD SUCCESSFUL
Total time: 0 seconds
0
```

Gruß Tom


----------



## tobias_petry (1. April 2007)

hmm, also bei mir springt immernoch das Fenster auf, irgendwie komisch, habe es folgendermaßen angepasst:


```
ProcessBuilder processBuilder = new ProcessBuilder("cmd", "/c", "setup.bat");
processBuilder.directory(new File("I:/TW/java_files/com0com"));
```


----------



## kela_root (22. April 2010)

Danke Thomas, klappt wunderbar mit deinem Codebeispiel, danach hab ich schon ein bisschen gesucht!


----------

