Exec Problem

Status
Nicht offen für weitere Antworten.

Holger_S

Mitglied
Hallo Jungs und Mädels,

ich bin gerade am Programmieren eines Eclipse Plugins für die Uni, dort muss ich ein Windows Programm aus Java öffnen. Das bringt mich auf exec, wenn ich

Runtime.getRuntime().exec("c:/programme/test.exe" );

aufrufe, klappt alles wunderbar. Nun zu meinem Problem, wen ich eine Systemvariable setzt, zb.

TEST -> c:/programme/test.exe

und in der cmd %TEST% aufrufe klappt es auch, nun will ich dies abe rmit exec machen, also

Runtime.getRuntime().exec("%TEST%" );

Und da funktioniert es nicht, hat evtl. jemand eine Idee? Würde mich sehr über kreative Vorschläge freuen 😉

Gruß Holger
 
%irgendwas%
geht bei mir zwar nicht, aber
echo %irgendwas%

um das in Java zu machen funktioniert z.B.:

Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;

public class Test {

	public static void main(String[] args) throws Exception {
		Process p =
			Runtime.getRuntime().exec(
				new String[] { "cmd", "/c", "echo %PATH%" });
		BufferedReader b =
			new BufferedReader(new InputStreamReader(p.getInputStream()));
		Thread.sleep(500);
		System.out.println("p: " + p.getInputStream().available());
		while (b.ready()) {
			System.out.println("p: " + b.readLine());
		}

	}
}

bzw.
Process p = Runtime.getRuntime().exec("cmd /c echo %PATH%");

geht auch, aber manchmal braucht man diese Array-Schreibweise,
wenn man Paramter an andere Programme übergeben will oder so
 
Mit ein bisi rausparsen geht das schon 😉

Code:
    private static Hashtable environment = null;
    /****************************************************************************
     * Funktion holt die Enviromentvariablen und gibt diese dann zurück
     * @param strWhat String welche variable
     * @return String wert
     ***************************************************************************/
    public static String getEnviroment(String strWhat)
    {
      String strRet = null;
      if(strWhat.indexOf("%") != -1)
        strWhat = strWhat.replaceAll("%","");
      //wenn es nicht in der Hashtable ist
      if(!environment.containsKey(strWhat))
      {
        BufferedReader br = null;
        String strTmp = null;
        try
        {
          br = new BufferedReader(new InputStreamReader(Runtime.getRuntime().exec("cmd /c set").getInputStream()));
          while ( (strTmp = br.readLine()) != null)
          {
            //gefunden
            if (strTmp.toLowerCase().startsWith(strWhat.toLowerCase()) &&
                strTmp.indexOf("=") != -1)
            {
              strRet = strTmp.substring(strTmp.indexOf("=") + 1);
              while ( (strTmp = br.readLine()) != null && strTmp.indexOf("=") == -1)
                strRet += strTmp;
            }
          }
          environment.put(strWhat,strRet);
          br.close();
        }
        catch (Exception ex)
        {
          ex.printStackTrace(System.out);
        }
      }
      //ansonsten wenn es in der hashtable ist
      else
      {
        //rausholen
        Object o = environment.get(strWhat);
        if(o != null)
          strRet = o.toString();
      }
      return strRet;
    }
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben