hellemon 10 Geschrieben 13. November 2005 Melden Teilen Geschrieben 13. November 2005 Hallo zusammen, Vielleicht könnten mir die Programmierer unter euch eine kleine Hilfestellung geben bezüglich aus einer Datei lesen und in eine andere diese gelesene Zeile wieder eintragen. Denn genau das ist jetzt mein Problem das ich lösen möchte aber noch nicht weiß wie ich es anstellen soll. Meine Programmierkenntnisse lassen dies bezüglich echt zu wünschen übrig. Ich habe z.B. 50 Clients die ich manuell per Hand anfassen müsste um eine bestimmte Datei zu ändern. Da wir eine Softwareverteilung einsetzen kann man es zwar auch über diese machen aber hierzu müsste der User abgemeldet werden und genau das wollte ich mit solch einer Automatischen änderung der Textdatei umgehen. Da nicht jede Textdatei auf den Clients gleich ist kann ich auch nicht eine Textdatei basteln und auf alle andern kopieren sondern muss eine bestimmte Zeile abändern. Und dazu benötige ich eure Hilfe. Textdatei auf den Client sieht ungefär so aus: (test.cfg) #wcontrol server=<servername>,<server ip adresse> client id=123fg0j mac=00040012138b Textdatei bei mir auf den Client würde nur den neuen Servernamen und passende IP-Adresse haben: (servername.txt) server=<neuer servername>,<neue server ip adresse> Hier mein mal angefangenes Script das mit Auto IT erstellt wurde: $servername = FileOpen("servername.txt", 0) $var = FileReadLine($servername) FileReadLine ("servername.txt", 1) FileClose($servername) ;############################## $cfgfile = FileOpen("test.cfg", 1) FileWriteLine($cfgfile, $var) FileClose($cfgfile) Leider funktioniert es nicht ganz so wie ich mir das vorstelle denn ich bekomme diese zweite Zeile in der "test.cfg" nicht überschrieben. Ich möchte gerne die erste Textdatei (servername.txt) auslesen und das ganze in eine Variable speichern, danach möchte ich die zweite Datei (test.cfg) öffnen und diese gespeicherte Variable mit dem bestehenden Eintrag überschreiben. sprich am Ende sollte es wie folgt aussehen #wcontrol server=<neuer servername>,<neue server ip adresse> client id=123fg0j mac=00040012138b vorab vielen Dank für eure mühen Gruß Helmut Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 Die Syntax von Deinem AutoIT schaut so ähnlich wie Kixtart aus: http://www.kixtart.org/ Wenn die zu ändernde CFG-Datei INI-Format hat, geht die Funktion WriteProfileString( ) . Wenn nicht, musst Du die Datei zeilweiweise in einer Schleife lesen, dabie jede Zeile auf "server" durchsuchen und dann die Zeile ändern. Danach löscht Du die alte Datei benennst die neue Datei um. Für alles findest Du Beispiele in die Doku von Kixtart oder im Forum bei obiger URL. -Zahni Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 Hallo, mit AutoIT habe ich sowas noch nicht gemacht, habe im Moment auch keine Zeit mir den Befehlssatz davon anzuschauen. Der Kommandointerpreter (Eingabeaufforderung) bietet nach meiner Kenntnis keinen Parser zum direkten, automatischen Editieren einer Text- oder Batchdatei. Solch eine Möglichkeit habe ich schon vermisst. Ich kann mir vorstellen, das Problem mit der For-Schleife und der Textiteration (for /f) zu lösen. Dabei würden Daten von einer Datei in eine andere kopiert mit Zwischenstation in einer Variablen. Die zu ändernde Zeile wird nach dem Auslesen und Erkennen (Bedingung, Vergleich) nicht kopiert, sondern der Inhalt der Variablen ersetzt und dann übertragen. Eine Frage ist, gibt es eine bessre Methode als die von mir geschilderte? Ein direktes, skriptgesteuertes Editieren der Datei mittels eines Parsers wäre eine schöne Alternative. Gruß Edgar Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 #wcontrolserver=<neuer servername>,<neue server ip adresse> client id=123fg0j mac=00040012138b del c:\newcontrol.txt echo #newcontrol > c:\newcontrol.txt for /f %%i in (c:\control.txt) do echo %%i >> c:\newcontrol.txt pause #newcontrol #wcontrol server=<neuer client mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 del c:\newcontrol.txt echo #newcontrol > c:\newcontrol.txt for /f "tokens=*" %%i in (c:\control.txt) do echo %%i >> c:\newcontrol.txt pause #newcontrol #wcontrol server=<neuer servername>,<neue server ip adresse> client id=123fg0j mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 for /f "tokens=* skip=1" %%i in (c:\control.txt) do echo %%i >> c:\newcontrol.txt #newcontrol server=<neuer servername>,<neue server ip adresse> client id=123fg0j mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 for /f "tokens=* skip=1" %%i in (c:\control.txt) do ( echo %%i >> c:\newcontrol.txt ) #newcontrol server=<neuer servername>,<neue server ip adresse> client id=123fg0j mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 del c:\newcontrol.txt echo #newcontrol > c:\ccontrol.txt for /f "tokens=* skip=1" %%i in (c:\control.txt) do set var=%%i & call :work pause :work echo %var% >> c:\ccontrol.txt goto :eof #newcontrol server=neuer servername,neue server ip adresse client id=123fg0j mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 del c:\newcontrol.txt echo #newcontrol > c:\ccontrol.txt for /f "tokens=* skip=1" %%i in (c:\control.txt) do set var=%%i & call :work pause :work echo %var% set nibble=%var:~0,6% pause if %nibble% equ server echo 1 >> c:\ccontrol.txt echo %var% >> c:\ccontrol.txt goto :eof #newcontrol 1 server=neuer servername,neue server ip adresse client id=123fg0j mac=00040012138b mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 del c:\newcontrol.txt echo #newcontrol > c:\ccontrol.txt for /f "tokens=* skip=1" %%i in (c:\control.txt) do set var=%%i & call :work pause :work echo %var% set nibble=%var:~0,6% pause if %nibble% equ server echo 1 >> c:\ccontrol.txt & goto :eof echo %var% >> c:\ccontrol.txt goto :eof #newcontrol 1 client id=123fg0j mac=00040012138b mac=00040012138b Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 So kann es gehen. Zum Lesen empfehle ich http://www.bb-sys.de/bbshell.htm Es gibt wohl noch eine andere Möglichkeit mittels des Find-Befehls. Die wahrscheinlich einfacher, ich damit nicht so vertraut. Zitieren Link zu diesem Kommentar
zahni 554 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 @lefg, führst Du oft Selbstgespräche ? Zitieren Link zu diesem Kommentar
lefg 276 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 Off-Topic:führst Du oft Selbstgespräche Täglich :D Zitieren Link zu diesem Kommentar
MacBoon 10 Geschrieben 14. November 2005 Melden Teilen Geschrieben 14. November 2005 Hallo, lefg lässt uns wenigstens an seinen kreativen Phasen teilhaben, dafür nimmt man dann doch einiges in Kauf, oder?? :D Gruß MacBoon Zitieren Link zu diesem Kommentar
hellemon 10 Geschrieben 14. November 2005 Autor Melden Teilen Geschrieben 14. November 2005 Hallo @lefg, wow, vielen Dank für deine Hilfe, werde mich gleich dran machen und versuchen ob es funktioniert was du da so zusammengebastelt hast. Muss erst einmal herrausfinden wo was drinsteht. :-) Auch den anderen vielen Dank für eure Beiträge. Hier wird einem wirklich geholfen wenn mal Not am Mann ist. Echt super Gruß hellemon Zitieren Link zu diesem Kommentar
Empfohlene Beiträge
Schreibe einen Kommentar
Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.