Leeloo5E: Batch: Dateiinhalt in Variable einlesen

Hallo,

ich wollte mir grad ein kleines Batch-Skript zusammenbasteln, welches mir erlaubt, den Inhalt einer Text-Datei (nur eine Zeile) einzulesen. Dieser String soll dann untersucht und eigentlich nur die letzten paar Zeichen ausgegeben werden. Nun scheitere ich aber daran, den Inhalt besagter Datei in eine Variable zu kriegen, um dann eben die letzten paar Zeichen auszugeben.
Hat jemand einen Tipp für mich, wie ich das bewerkstelligen kann!?

Gruß,
Leeloo

--
"Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
  1. Hello,

    Hat jemand einen Tipp für mich, wie ich das bewerkstelligen kann!?

    Wenn Du so freudlich wärst, noch ein paar unbedeutende Nebeninformationen zu geben?

    • Betriebssystem
    • welche Shell
    • verfügbare Script- oder Hochsprachen

    Was hast Du denn schon versucht, was ist dabei herausgekommen?
    Bitte die vollständigen Fehlermeldungen!

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau

    1. Hallo,

      Hi Tom,

      sorry, dachte nicht, dass dies dabei unbedingt so wichtig ist.

      Wenn Du so freudlich wärst, noch ein paar unbedeutende Nebeninformationen zu geben?

      • Betriebssystem

      Windows XP bzw. 2003 Server

      • welche Shell

      DOS

      • verfügbare Script- oder Hochsprachen

      Perl, PHP (damit bräucht ich kein Batch)

      Was hast Du denn schon versucht, was ist dabei herausgekommen?
      Bitte die vollständigen Fehlermeldungen!

      Keine Fehlermeldungen, außer vielleicht Syntaxfehler.

      Mein Skript sieht so aus:

        
      @ECHO OFF  
        
      CLS  
        
      SET file=temp.txt  
        
      ECHO Wert von file: %file%  
        
      IF EXIST "%file%" GOTO Mache  
      IF NOT EXIST "%file%" GOTO Fehler  
        
      :Mache  
      FINDSTR "INTEGER:" %file% >NUL  
      IF NOT ERRORLEVEL 1 GOTO Gefunden  
        
      :Gefunden  
      ECHO String gefunden  
      type %file% >SET content  
      ECHO Wert von content: %content%  
      GOTO End  
        
      :Fehler  
      ECHO Datei existiert nicht  
      GOTO End  
        
      :End  
      ECHO Ende im Gelaende  
      
      

      Zuerst wird geguggt, ob das File existert, wenn ja, gehe zu Mache. Dort wird überprüft, ob ein gewisser String in der Datei ist. Das ist nur zum Testen. Das sowas geht, lässt mich auch hoffen, den String in eine Variable zu speichern. Danach versuche ich, eben den Inhalt in eine Variable zu speichern. Aber außer der Ausgabe content erhalte ich nichts an der Stelle und %content% ist auch leer.

      Gruß,
      Leeloo

      --
      "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
      1. Hello,

        • welche Shell

        DOS

        also vermutlich "cmd.exe" ?

        Da sehe ich schwarz, einzelne Zeilen herauszubekommen.
        Es wäre wahrscheinlich leichter, ein kleines Hochsprachenprogramm zu schreiben oder den PEARL- oder PHP-Interpreter um Hilfe zu bitten. Wenn sie denn drauf sind auf der Maschine, wer hindert Dich daran?

        Harzliche Grüße vom Berg
        http://www.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau

        1. Hallo,

          • welche Shell

          DOS
          also vermutlich "cmd.exe" ?

          hm ... jo. MS-DOS-Eingabeaufforderung.

          Da sehe ich schwarz, einzelne Zeilen herauszubekommen.
          Es wäre wahrscheinlich leichter, ein kleines Hochsprachenprogramm zu schreiben oder den PEARL- oder PHP-Interpreter um Hilfe zu bitten. Wenn sie denn drauf sind auf der Maschine, wer hindert Dich daran?

          wollte mal was neues ausprobieren ;-)

          Gruß,
          Leeloo

          --
          "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
          1. Hello,

            wollte mal was neues ausprobieren ;-)

            Das ist ja einer dere Vorteile bei einer Linux-Umgebung, dass das OS und seine Shells darauf eingerichtet sind.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

        2. also vermutlich "cmd.exe" ?
          Da sehe ich schwarz, einzelne Zeilen herauszubekommen.

          Ich nicht.

          Siechfred

          --
          Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
          1. Hallo,

            also vermutlich "cmd.exe" ?
            Da sehe ich schwarz, einzelne Zeilen herauszubekommen.

            Ich nicht.

            Danke Siechfred, das scheint der richtige Ansatz zu sein. Nur leider besteht meine erste Zeile nicht nur aus hintereinander gereiten richtigen Zeichen, sondern enthält auch Leerzeichen. Und wenn so eins Auftritt, wird einfach abgeschnitten. Und der Rest ab dem Leerzeichen ignoriert. Bloß ist gerade der, der wichtige. Jemand ne Idee, wie ich das umgehen kann?

              
            :Mache  
            FOR /f %%f IN (%file%) DO (  
             ECHO %%f  
             SET str=(%%f)  
             ECHO %str:~-4%  
            )  
            GOTO End  
            
            

            Gruß,
            Leeloo

            --
            "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
          2. Hello,

            also vermutlich "cmd.exe" ?
            Da sehe ich schwarz, einzelne Zeilen herauszubekommen.

            Ich nicht.

            Und wenn die Zeile passt, kannst Du sie, bzw. nur einen teil davon, in eine Systemvariable schreiben oder ausgeben?

            "Dieser String soll dann untersucht und eigentlich nur die letzten paar Zeichen ausgegeben werden"

            Dazu fällt mir nix ein.

            Harzliche Grüße vom Berg
            http://www.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau

            1. Hallo,

              also vermutlich "cmd.exe" ?
              Da sehe ich schwarz, einzelne Zeilen herauszubekommen.

              Ich nicht.

              Und wenn die Zeile passt, kannst Du sie, bzw. nur einen teil davon, in eine Systemvariable schreiben oder ausgeben?

              jo, das geht.

              "Dieser String soll dann untersucht und eigentlich nur die letzten paar Zeichen ausgegeben werden"

              genau die krieg ich aber nicht raus: s.u. :-(

              Dazu fällt mir nix ein.

              dito.

              Gruß,
              Leeloo

              --
              "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
              1. Hello,

                genau die krieg ich aber nicht raus: s.u. :-(

                Dazu fällt mir nix ein.

                ist nicht ganz die Wahrheit.
                Für solche Anwwendungsfälle habe ich mir früher immer kleine Tools mit Pascal gebastelt.
                Die werden selten größer als 5kByte.
                Und dann kann man auch Batch-Programmierung ala DOS-Command-Shell hinbekommen.

                Harzliche Grüße vom Berg
                http://www.annerschbarrich.de

                Tom

                --
                Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
                Nur selber lernen macht schlau

                1. Hallo,

                  Hello,

                  genau die krieg ich aber nicht raus: s.u. :-(

                  Dazu fällt mir nix ein.

                  ist nicht ganz die Wahrheit.
                  Für solche Anwwendungsfälle habe ich mir früher immer kleine Tools mit Pascal gebastelt.
                  Die werden selten größer als 5kByte.
                  Und dann kann man auch Batch-Programmierung ala DOS-Command-Shell hinbekommen.

                  puh, Pascal. Das ist ja ewig her bei mir. Da müsst ich mich wohl och komplett neu einarbeiten. Nee, zu aufwändig ...

                  Gruß,
                  Leeloo

                  --
                  "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
        3. Hallo Tom.

          • welche Shell

          DOS
          also vermutlich "cmd.exe" ?

          Da sehe ich schwarz, […]

          YMMD!

          Einen schönen Montag noch.

          Gruß, Mathias

          --
          ie:% fl:| br:< va:) ls:& fo:) rl:( n4:~ ss:) de:] js:| mo:| zu:)
          debian/rules
      2. Moin!

        • verfügbare Script- oder Hochsprachen

        Perl, PHP (damit bräucht ich kein Batch)

        Dann nimm doch einfach eine von den beiden. PERL und PHP haben beide ein Kommandozeileninterface, unter dem du alles machen kannst, was auch Webseiten generiert.

        Es braucht (vor allem bei PHP) zwar ein wenig Gewöhnung, dass man trotzdem diese Tags <?php ?> setzen muß, aber ansonsten keinerlei HTML-Tags ausgibt, sondern nur Plain Text, aber das geht nach fünf Minuten vorbei.

        PERL ist ja auch die geborene mächtige Kommandozeilensprache, würde sich also noch eher anbieten.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
      3. Hallo,

        sorry, dachte nicht, dass dies dabei unbedingt so wichtig ist.

        das sind die wichtigsten Informationen überhaupt :-)

        • Betriebssystem
          Windows XP bzw. 2003 Server
        • welche Shell
          DOS

        Nein, nicht DOS. CMD.EXE ist ein reinrassiger 32-Bit-Kommandozeileninterpreter. CMD.EXE ist nicht COMMAND.COM, kann vor allem viel mehr.

        Keine Fehlermeldungen, außer vielleicht Syntaxfehler.

        REM In der nächsten Zeile weißt Du, wie man einer Variablen einen Wert zuweist:

        SET file=temp.txt

        [...]

        REM Warum hier dieses abenteuerliche Konstrukt.
        REM Wie kommst Du auf eine solch' abwegige Idee?

        type %file% >SET content

        REM Folgendes war wohl viel zu schwierig :-)
        SET content=%file"%

        Gegebenenfalls Anführungszeichen verwenden.
        Nachdem dies geklärt ist, Siechfred Dir Hinweise gegeben hat, wie man eine Datei verarbeiten kann, fehlt nun nur noch ein Beispiel Deinerseits, wie eine gesuchte Beispielzeile aussieht und welchen Text Du daraus extrahieren möchtest und woran Du dabei scheiterst.

        Freundliche Grüße

        Vinzenz

        1. Hello,

          Nachdem dies geklärt ist, Siechfred Dir Hinweise gegeben hat, wie man eine Datei verarbeiten kann, fehlt nun nur noch ein Beispiel Deinerseits, wie eine gesuchte Beispielzeile aussieht und welchen Text Du daraus extrahieren möchtest und woran Du dabei scheiterst.

          Nun sag bloß, dass das mit Bordmitteln von cmd.exe auch geht?
          Mit meinen geliebten Win98SE-Kisten kann ich es ja nicht ausprobieren

          Ich habe nur einen einzigen Win2000-Recher, und auf dem wird nicht gespielt ...

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

        2. gudn tach!

          REM In der nächsten Zeile weißt Du, wie man einer Variablen einen Wert zuweist:

          SET file=temp.txt

          [...]

          REM Folgendes war wohl viel zu schwierig :-)
          SET content=%file"%

          ist das gleiche wie
            SET content=

          und selbst ohne das ominoese anfuehrungszeichen waer das ziemlich langweilig, weil dann content == file gelten wuerde.

          Nachdem [...] Siechfred Dir Hinweise gegeben hat, wie man eine Datei verarbeiten kann,

          genau. das waren die entscheidenden hinweise. wichtig sind vermutlich noch die optionen delims und tokens; mehr siehe "for /?"

          prost
          seth

          1. Hallo,

            juchhuuuuu, es geht :-)))

              
              
            @ECHO OFF  
              
            CLS  
              
            SET file=temp.txt  
              
            IF EXIST "%file%" GOTO Mache  
            IF NOT EXIST "%file%" GOTO Fehler  
              
            :Mache  
            FOR /f "delims=" %%f IN (%file%) DO (  
              ECHO %%f  
              SET str=%%f  
              ECHO %str:~-3%  
            )  
            GOTO End  
              
            :Fehler  
            ECHO Datei existiert nicht  
            GOTO End  
              
            :End  
            ECHO Ende im Gelaende  
              
            
            

            Die Angabe "delims=" lässt die Leerzeichen ignorieren und gibt mir die ganze Zeile zurück, so dass ich an die letzten 3 Zeichen herankomme.

            THX Euch allen für die kreative Unterstützung :-)))

            Gruß,
            Leeloo

            --
            "Als es noch keine Computer gab, war das Programmieren noch relativ einfach." - Edsger W. Dijkstra
          2. Hallo

            SET content=%file"%

            *gg*

            ich sollte endlich eine neue Glühbirne für mein Arbeitszimmer besorgen :-)

            Freundliche Grüße

            Vinzenz