Batch: Dateiinhalt in Variable einlesen
Leeloo5E
- programmiertechnik
0 Tom0 Leeloo5E0 Tom0 Sven Rautenberg0 Vinzenz Mai
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
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?
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
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
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
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
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
also vermutlich "cmd.exe" ?
Da sehe ich schwarz, einzelne Zeilen herauszubekommen.
Siechfred
Hallo,
also vermutlich "cmd.exe" ?
Da sehe ich schwarz, einzelne Zeilen herauszubekommen.
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
Hello,
also vermutlich "cmd.exe" ?
Da sehe ich schwarz, einzelne Zeilen herauszubekommen.
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
Hallo,
also vermutlich "cmd.exe" ?
Da sehe ich schwarz, einzelne Zeilen herauszubekommen.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
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
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
Hallo Tom.
- welche Shell
DOS
also vermutlich "cmd.exe" ?Da sehe ich schwarz, […]
YMMD!
Einen schönen Montag noch.
Gruß, Mathias
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
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
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
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
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
Hallo
SET content=%file"%
*gg*
ich sollte endlich eine neue Glühbirne für mein Arbeitszimmer besorgen :-)
Freundliche Grüße
Vinzenz