bart15
Goto Top

Konfigurationsdateien (Dateiname.cfg) per Batch vergleichen

Ich habe die Aufgabe bekommen Konfigurationsdateien (Dateiname.cfg) per Batch auf Änderungen zu überprüfen und dann gegebenfalls auf die Änderungen per E-mail hiinzuweisen.

Hi nochmal an alle,


also wie schon oben beschrieben soll ich eine Batch-Datei scripten mit der ich Konfigurationsdateien (Dateiname.cfg) Zeile für Zeile vergleiche und dann per E-mail auf die Änderungen hinweisen.
Es wird dann so aussehen, dass ich eine alte Konfigurationsdatei bereits habe und diese dann mit der neuen Konfigurationsdatei Zeile für Zeile vergleichen soll. Bei den Konfigurationsdateien handelt es sich um Konfigurationen von Switchen.


Also:

alte Datei Zeile für Zeile vergleichen mit neuer Datei ---> Änderungen in eine E-mail packen


Ich hoffe es ist klar geworden was ich brauche^^

Wenn nicht meldet euch.


Danke schon mal im Vorraus.


Gruß Bart

Content-Key: 153773

Url: https://administrator.de/contentid/153773

Printed on: April 23, 2024 at 16:04 o'clock

Mitglied: 60730
60730 Oct 26, 2010 at 07:34:25 (UTC)
Goto Top
Moin,

aus gegebenem Anlass...(du sollst die scripten) (Hi nochmal an alle,) war wohl ein PN Versuch...

nur Hinweise:
fc alt.csv neu.csv

for /f %a in (alt.csv) do ?
findstr /?

DIe eingebauten Hilfen der jeweiligen Befehle zeigen dir die Befehle, ich hab dir mal 2 von 3 möglichen Befehlen (Wegen) genannt

Gruß
Member: Bart15
Bart15 Nov 01, 2010 at 09:47:57 (UTC)
Goto Top
Hallo,

danke schon mal. Der "fc-Befehl" hilft mir schon mal sehr. Allerdings habe ich jetzt noch das Problem. Ich habe einen Ordner mit geschäzt 1500 Files (.cfg). In diesem Ordner sind Konfigurationsdateien mit sehr kryptischen Namen z.B. 172_16_16_253_20090224_0201_SwCfg.cfg.

Diese Dateien werden nach kurzer Zeit auf eine externe Platte weggesichert. Mein Ziel ist es ja die neuen Konfigurationsdateien mit den alten vorhandenen auf den Inhalt hin zu vergleichen.

Wie mache ich das jetzt am geschicktesten, dass das Script jede vorhandene Datei mit der neuen Datei inhaltlich vergleich?


Danke für eure Hilfe.


Gruß Bart
Mitglied: 60730
60730 Nov 01, 2010 at 10:06:34 (UTC)
Goto Top
Moin,

1.500 Files mit FC - oh weh face-wink

Was genau soll den da Ziel sein?

Am "einfachsten" wäre alle 1.500 cfgs nach ihrem Ziel zu sortieren - obwohl deine "Kryptischen" Dateinamen sind doch sinnig - ip_Adresse_datum.cfg

Entweder machst du das also nach dem Dateinamen, oder nach dem Inhalt und dann jeden Treffer vergleichen.

Ehrlicherweise würde ich das aber nicht machen, sondern lieber neu anfangen und nur dann - wenn die aktuelle cfg neuer/anderen Inhalt hat die abspeichern.

Im normalfall intersiieren mich meine ollen cfg Files der Switche nie mehr - allerhöchstens wenn ich mal einen Bock geschossen habe - den merkt man aber sofort und holt sich seine cfg zurück.

Von daher - trink nochmal nen Kaffe und überleg dir wohin die Reise gehen soll.

Gruß
Member: Bart15
Bart15 Nov 02, 2010 at 13:42:04 (UTC)
Goto Top
Hallo,


ja deine Einwände sind schon irgendwie berechtigt. Allerdings hat sich es jetzt wieder ein bisschen gelichtet. Glücklicherweise hat schon jemand ein vb Script geschrieben, welches die kryptischen Namen

172_16_16_253_20090224_0201_SwCfg.cfg folgendermaßen umformt z.B.--> 172.16.16.253.cfg. Problematisch war es, da es mehrere Versionen gab. Man musste also auch noch unterscheiden,welches das neuste vom Datum her war. Die neue Version (172.16.16.253.cfg) wird dann weggespeichert und die ganzen überflüssigen Daten werden gelöscht.

Ich habe nun einen Ordner mit lauter 172.1X.XXX.XXX.cfg Dateien und eine Ordner mit den alten Konfigurationsdateien. Diese sind in den gleichen Format gespeichert. (172.1X.XXX.XXX.cfg)
Ebenso habe ich herrausgefunden, dass ich nur bestimmte Switche auf Änderungen in der Konfiguration untersuchen muss. Am besten wäre es somit über die IP die Auswahl zu machen.


fc 172.1XX.XXX.XXX.cfg 172.1XX.XXX.XXX.cfg >datei3.txt


Ich könnte natürlich jede benötigte IP in die Batchdatei schreiben, allerdings gibt es doch bestimmt eine andere Lösung dafür^^ Ebenso macht mit es Kopfzerbrechen, dass die Daten ja in 2 Ordnern liegen und zudem gleich heißen. Gibt es damit Probleme? Der "fc- Befehl" geht ja nur wenn die Daten im selben Ordner liegen?
Am Ende vom Lied müsste ich dann noch die Änderungen per Mail verschicken. Wie stelle ich das am besten an?


Danke schon mal für eure Mühe. Hoffe ihr versteht was ich will


Gruß Bart
Mitglied: 60730
60730 Nov 02, 2010 at 15:34:56 (UTC)
Goto Top
moin,

der "fc- Befehl" geht ja nur wenn die Daten im selben Ordner liegen?
??? der geht nie - der hat keine Beine face-wink

rem preparethetest
if not exist c:\test md c:\test
if not exist c:\test\111 md c:\test\111
if not exist c:\test\222 md c:\test\222
echo %date%>c:\test\111\123.cfg
echo %date%>c:\test\222\123.cfg
rem run the test successfully
for /f %%a in ('dir /b c:\test\111\*.cfg') do fc c:\test\111\%%a c:\test\222\%%a  
pause

rem run the test not successfully
echo %time%>c:\test\111\123.cfg
echo %time%>c:\test\222\123.cfg
for /f %%a in ('dir /b c:\test\111\*.cfg') do fc c:\test\111\%%a c:\test\222\%%a  
pause

und das ganze noch etwas sauberer:
for /f %%a in ('dir /b c:\test\111\*.cfg') do if exist c:\test\222\%%a fc c:\test\111\%%a c:\test\222\%%a  

Gruß


edit:
Zitat von @60730:
Moin,

aus gegebenem Anlass...(du sollst die scripten)
face-wink
/edit
Member: Bart15
Bart15 Nov 03, 2010 at 08:40:55 (UTC)
Goto Top
Hallo,


also ich werde es nun wie folgt machen.

Ich werde einfach eine Batch-Datei anlegen, in dem ich für jeden Switch den FC-Befehl ausführe. Sind ja nicht mehr alle Switche sondern nur noch ein paar. Jetzt kommt aber eine neue Frage auf. Wie stelle ich es denn am geschicktesten an, dass ich alle Ergebnisse vom Vergleich in eine gemeinsamme TXT-Datei speicher. Noch schöner wäre es, wenn er nur die TXT-Datei anlegen würde, wenn er auch Unterschiede finden würde.


Danke

Gruß Bart
Mitglied: 60730
60730 Nov 03, 2010 at 09:09:05 (UTC)
Goto Top
Moin,

hmmm da oben hab ich dir doch einen Weg gezeigt?

Jetzt nimmst du mal diesen Schnippsel und malst vor jeden der beiden Pause in eine zusätzliche Zeile ein echo %errorlevel%.
Damit (obere Schnippsel) hast du zwei von drei Werten, die fc zurückgibt.
Der andere ist da oben mit der Befehlskette "if not exist" ausgeschaltet

Zitat von @Bart15:
also wie schon oben beschrieben soll ich eine Batch-Datei scripten

Grob gescriptet hab ich dir die ja schon, aber etwas Eigenleistung solltest du schon aufbringen.

Gruß
Member: Bart15
Bart15 Nov 03, 2010 at 09:31:16 (UTC)
Goto Top
Hi,

danke schon mal für deine Mühe.

if not exist c:\test md c:\test
if not exist c:\test\111 md c:\test\111
if not exist c:\test\222 md c:\test\222

was willst du den damit bezwecken? Erstellst doch einfach 3 Ordner oder?


echo %date%>c:\test\111\123.cfg
echo %date%>c:\test\222\123.cfg

Damit wird das aktuelle Datum ausgelesen


rem run the test successfully
for /f %%a in ('dir /b c:\test\111\*.cfg') do fc c:\test\111\%%a c:\test\222\%%a
pause

rem run the test not successfully
echo %time%>c:\test\111\123.cfg
echo %time%>c:\test\222\123.cfg
for /f %%a in ('dir /b c:\test\111\*.cfg') do fc c:\test\111\%%a c:\test\222\%%a

der Inhalt dieser Zeile erschließt sich mir nicht genau. Du vergleichst doch damit alle .cfg dateien in dem Ordner 111 mit den .cfg Dateien in dem Ordner 222 (mithilfe einer For-Schleife)

Warum machst du den Vergleich dann nochmal?

Helf mir mal kurz auf die Sprünge


Gruß Bart
Mitglied: 60730
60730 Nov 03, 2010 at 09:41:45 (UTC)
Goto Top
Zitat von @Bart15:
Hi,

danke schon mal für deine Mühe.

was willst du den damit bezwecken? Erstellst doch einfach 3 Ordner oder?
01. rem preparethetest

  • Oder auf Deutsch bereite eine Testumgebung vor...
Damit wird das aktuelle Datum ausgelesen

  • Nein das Datum wird "IN" die beiden Dateien geschrieben

for /f %%a in ('dir /b c:\test\111\*.cfg') do fc c:\test\111\%%a c:\test\222\%%a
der Inhalt dieser Zeile erschließt sich mir nicht genau. Du vergleichst doch damit alle .cfg dateien in dem Ordner 111 mit den .cfg Dateien in dem Ordner 222 (mithilfe einer For-Schleife)

  • alle aus Ordner 111 mit Ihrem gleichnamigen Vetter aus Ordner 222
Und wenn du mal deine Frage genauer lesen tutest, die mich zu diesem Testszenario bewegt hat...

Zitat von @Bart15:----
Der "fc- Befehl" geht ja nur wenn die Daten im selben Ordner liegen?

Warum machst du den Vergleich dann nochmal?
  • Was steht im Rem vor dem zweiten Vergleich?
  • Wenn ich zweimal hintereinander %Time% abfrage -sind die ausgegebenen Werte dann auf die millisekunden identisch?

Helf mir mal kurz auf die Sprünge

  • *gübel* ehrlich - wenn das da oben schon zu komplex ist, das man das nicht nachvollziehen kann, dann muß ich mir wohl einen Kittel mit rückwärtig angebrachten Ärmeln besorgen....
Member: Bart15
Bart15 Nov 03, 2010 at 14:07:32 (UTC)
Goto Top
Hi,


zu komplex ist das nicht, aber man muss da erstmal durchsteigen. Wenn man das nicht jeden Tag macht ist es schwierig und erst recht wenn man einen Quelltext von einem anderen vor sich liegen hat. Da wirst du mir ja recht geben^^.

Ich habe das nun mal so versucht nachzubilden wie du es mir gegeben hast. For-Schleife und so geht prima. Allerdings hab ich dabei ja immer noch keine Ausgabe der Unterschiede von den Dateien. Wie geb ich dem denn das mit, dass der nach jedem Durchlauf der For-Schleife die Unterschiede in die slebe TXT-Datei schreibt. Soll ja am ende alles in einer Datei stehen.

Die Sache mit der Zeit habe ich jetzt erstmal weggelassen. Sehe ich für mich keine Relevanz darin. Ich hab ja 2 Ordner mit den Konfigdateien. In dem einen sind die neuen und in dem anderen die alten Dateien.


Gruß Bart
Mitglied: 60730
60730 Nov 03, 2010 at 14:43:44 (UTC)
Goto Top
Zitat von @Bart15:
Allerdings hab ich dabei ja immer noch keine Ausgabe der Unterschiede von den Dateien. Wie geb ich dem denn das mit, dass der nach jedem Durchlauf der
For-Schleife die Unterschiede in die slebe TXT-Datei schreibt. Soll ja am ende alles in einer Datei stehen.
for /f %%a in ('dir /b c:\test\111\*.cfg') do fc c:\test\111\%%a c:\test\222\%%a>>c:\test\logfile.txt  

Die Sache mit der Zeit habe ich jetzt erstmal weggelassen. Sehe ich für mich keine Relevanz darin.
???? Das ist ein einfacher Test der unterschiedliche cfg erzeugt und dir zeigen sollte, was passiert, wenn unterschiedliche Dateien verarbeitet werden....
(ich hätte auch in eine cfg Hallo Otto schreiben und die andere so lassen können)
Ich hab ja 2 Ordner mit den Konfigdateien. In dem einen sind die neuen und in dem anderen die alten Dateien.

Nochmal, du wolltest was selber schreiben, und wirklich so krumm ist keine einzige Zeile, dass man dafür studiert haben muß. (wie bekomme ich eine Ausgabe aus einer Dosbox in eine Textdatei?)
Ich ahne, das einer von uns beiden leicht überfordert ist und werfe das Handtuch...


Gruß