Jump to content

Textzeile mit AutoIT oder Batch ändern.


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar

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

Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...