tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von vfl_freak
  • 1 Beitrag von deepthroat
ERLEDIGT
JA
ANTWORTEN
9
ZUGRIFFE
733
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von armbruch
    armbruch armbruch ist offline Mitglied
    Registriert seit
    Oct 2011
    Ort
    Zürich (Schweiz)
    Beiträge
    20
    Hi zusammen

    Ich komm' mir grad ziemlich dumm vor, trotzdem hab' ich es nicht hingekriegt, aus einer einfachen .bat Datei das echo rauszulesen.

    Hier mal die test.bat
    Code :
    1
    2
    
    echo "hallo"
    pause

    Und hier die Java Methode
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
    public String start(String path)        {
        String result = new String();
        try     {
            Process process = Runtime.getRuntime().exec(path);
            process.getOutputStream().close();
            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
            
            
            String line;
            System.out.println("start reading");
            while((line=reader.readLine())!= null && line.length() > 0)     {
                System.out.println(line);
                result += line+"\n";
            }
            System.out.println("end reading");
        }
        catch(Exception e)      {
            System.out.println("error");
            result = "fehler";
        }
        return result;
    }

    Aufgerufen wird das ganze mit folgendem Java code:
    Code java:
    1
    
    String str = starter.start("cmd c:\\pfad\\test.bat");

    In dem guten String str steht allerdings nichts, die Frage ist wieso . Es ist gut möglich, dass da der ein- oder andere Fehler drin ist, jedoch funktioniert das ganze, wenn man echos von einem Powershellscript lesen möchte.

    Ich hoffe, jemand kann mir da weiterhelfen
     
    Ein Teil von jener Kraft,
    die stets das Böse will und stes das Gute schafft

  2. #2
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    so spontan kann ich keinen echten Fehler sehen, aber hier mal ein Beispiel, mit dem ich über den ProcessBuilder und "ipconfig" eine MAC-Adresse auslese ... vlt. hilft Dir das ja weiter :
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
              // ###########################################################################
              // Auslesen der MAC-Adresse
              // ###########################################################################
              ProcessBuilder pb = new ProcessBuilder( "ipconfig", "/all" );
              pb.redirectErrorStream( true );
              Process proc1 = pb.start();
              proc1.getOutputStream().close();
              BufferedReader readerIN = new BufferedReader( new InputStreamReader(proc1.getInputStream()) );
                     
              String strLine = "";
              String strMACAdr = "";
              
              // suchen des letzten Eintrags "Physikalische Adresse"
              while( (strLine = readerIN.readLine()) != null ) 
              {
                  if( strLine.trim().startsWith("Physikalische Adresse") )
                  {
                      strMACAdr = strLine.trim().substring( 36 );
                      if( strMACAdr != "" ) 
                      {
                          setMACWin( strMACAdr );
                      }
                      else 
                      {
                          setMACWin( "00-00-00-00-00-00" );
                      }
                  }
              }
              System.out.println( "MAC-Adresse: <" + strMACAdr  + ">");

    EDIT:
    und noch ein anderes Beispiel zum Auslesen der Volume-ID:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
              // ###########################################################################
              // Auslesen der Volume-ID
              // ###########################################################################
              Process proc2 = Runtime.getRuntime().exec( "cmd /C dir" );
              InputStreamReader input = new InputStreamReader( proc2.getInputStream() );
              BufferedReader in = new BufferedReader( input );
              String line = "";
              int count = 0;
              while( (line=in.readLine()) != null )
              {
                  count++;
                  if( count < 2 )
                  {
                      continue;
                  }
                    
                  if( count > 2 )
                  {
                      break;
                  }
                  String strVolID = line.substring( line.lastIndexOf(' ') + 1 );
                  setVolID( strVolID );
                  System.out.println( "Volume-ID: <" + strVolID  + ">" );
              }

    Gruß
    Klaus
    Geändert von vfl_freak (07.12.11 um 15:49 Uhr)
    armbruch bedankt sich. 
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  3. #3
    Avatar von armbruch
    armbruch armbruch ist offline Mitglied
    Registriert seit
    Oct 2011
    Ort
    Zürich (Schweiz)
    Beiträge
    20
    Vielen Dank, deine zweite Variante hat funktioniert, habe sie noch ein bisschen für meine Zwecke optimiert

    Wieso die erste Version nicht funktioniert, steht in den Sternen... Vermutlich liegt es am OS des Servers.
     
    Ein Teil von jener Kraft,
    die stets das Böse will und stes das Gute schafft

  4. #4
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Moin,

    na prima

    Zitat Zitat von armbruch Beitrag anzeigen
    Wieso die erste Version nicht funktioniert, steht in den Sternen... Vermutlich liegt es am OS des Servers
    ok, das kann sein ... IPCONFIG gibt es natürlich nur in der Windows-Welt !

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  5. #5
    Avatar von j2se
    j2se j2se ist offline Mitglied Silber
    Registriert seit
    Oct 2011
    Beiträge
    94
    Blog-Einträge
    1
    Die Version mit startsWith("Physikalische Adresse") hat bei mir nicht funktioniert, da ich ein englisches OS verwende. Nachdem ich aber den String mit startsWith("IP Address") ersetzt habe, wurde auch die richtige IP Adresse ausgegeben.
     

  6. #6
    Avatar von vfl_freak
    vfl_freak vfl_freak ist offline Mitglied Diamant
    Registriert seit
    Aug 2007
    Ort
    Niedersachsen
    Beiträge
    2.161
    Ah, ok - Du kannst ja den Befehl einfach mal im CMD-Fenster ausführen (und eine Datei umlenken). Dann siehst Du alle Einträge mit den entsprechenden Bezeichnung

    ipconfig /all > c:\XYZ.txt

    Gruß
    Klaus
     
    Es ist noch kein Meister vom Himmel gefallen - sonst hätte man schon längst seine Leiche gefunden !!

    Falls ich helfen konnte, wäre eine Bewertung oder ein Danke nett ;-)
    -------------------------------------------------------------------------------------------------
    Ich beantworte keine Fragen per PN !!
    Stellt Eure Fragen im Forum - dann haben alle etwas davon !!

  7. #7
    Avatar von armbruch
    armbruch armbruch ist offline Mitglied
    Registriert seit
    Oct 2011
    Ort
    Zürich (Schweiz)
    Beiträge
    20
    Am Befehl lag es nicht, den habe ich einerseits umgeschrieben, andererseits auch manuell ausprobiert, dann hat er funktioniert.. Ich habe mich natürlich nur an Befehle gehalten, die vom OS unterstützt werden.

    Aber vielleicht kennt einer von euch den genauen Unterschied - ausser dem Offensichtlichen - zwischen den beiden Varianten. Ich wäre da ganz Ohr :P
     
    Ein Teil von jener Kraft,
    die stets das Böse will und stes das Gute schafft

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Vielleicht kannst du mal sagen was der Unterschied war (was ging denn nicht? kein Resultat, nicht das erwartete, Exceptions?), damit man nicht so im Nebel rumstochern muss.

    Und vor allen Dingen sagen was du geändert hast?

    Und du beziehst dich auf die 2 Codeschnipsel von vfl_freak, richtig?

    Hast du mal ohne redirectErrorStream probiert?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    Avatar von armbruch
    armbruch armbruch ist offline Mitglied
    Registriert seit
    Oct 2011
    Ort
    Zürich (Schweiz)
    Beiträge
    20
    Hi

    Bei der getRuntime.exec() Methode kam gar nichts zurück. Ich gehe davon aus, dass das aufzurufende Script nicht korrekt aufgerufen wurde.

    Naja die Änderung ist doch klar ersichtlich: Ich habe die Runtime-Geschichte durch die ProcessBuilder-Sache ersetzt Code kann ich leider nicht zeigen, da ich schon extrem viele weitere Änderungen am Code vorgenommen habe und eine schöne Gegenüberstellung in meinen Augen nicht wirklich möglich ist.
     
    Ein Teil von jener Kraft,
    die stets das Böse will und stes das Gute schafft

  10. #10
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.
    Zitat Zitat von armbruch Beitrag anzeigen
    Bei der getRuntime.exec() Methode kam gar nichts zurück. Ich gehe davon aus, dass das aufzurufende Script nicht korrekt aufgerufen wurde.
    Allerdings.

    Du hast den /c Schalter vergessen. Ohne ihn, führt cmd das Batch Skript überhaupt nicht aus.

    Weiterhin brichst du ab sobald eine Leerzeile gelesen wird. Bei mir wird immer eine Leerzeile gleich zum Anfang der Skriptausführung ausgegeben, so das dann natürlich die Schleife sofort abgebrochen wird. D.h. du solltest den /q Schalter verwenden.

    Code :
    1
    
    cmd /q /c pfad/zu/hallo.bat
    Gruß
    armbruch bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

Ähnliche Themen

  1. php in Echo
    Von Manuel324 im Forum PHP
    Antworten: 12
    Letzter Beitrag: 29.06.09, 11:22
  2. if $ip echo else die
    Von ZaMpTi im Forum PHP
    Antworten: 2
    Letzter Beitrag: 22.11.06, 11:46
  3. echo
    Von bruderherz im Forum PHP
    Antworten: 8
    Letzter Beitrag: 06.09.02, 17:18
  4. echo
    Von Tob im Forum PHP
    Antworten: 6
    Letzter Beitrag: 08.07.01, 20:37

Stichworte