RichieSambuca Geschrieben 13. Januar 2011 Teilen Geschrieben 13. Januar 2011 Hallo zusammen, da dies mein erster Post in diesem Forum ist, hoffe ich, dass ich nicht allzu viel falsch mache und die User verärgere. Folgendes Problem habe ich: Meine Kenntnisse der Batch-Programmierung sind eher rudimentär und werden gerade aufgebaut. Da ich bei meinem Arbeitgeber derzeit in einer Art Ausbildungsphase bin und hier auch Batch gelehrt wird (neben anderen Programmiersprachen), habe ich vor kurzem einige (leichte) Aufgaben gestellt bekommen, die einfach dazu dienen sollen, die Syntax und Programmierweise zu erlernen. Eine Aufgabe war folgende: Aufgabe 3: Erzeugen einer Logdatei an einem Ort, welcher in der Registry gespeicher ist 1. Der Speicherort soll an folgender Stelle definiert werden: Schlüssel: HKLM\Software\Firmenname, Wert: LogFilePath 2. Der Inhalt der Logdatei ist beliebig 3. Im gleichen Schlüssel soll in dem Wert "LogFileCration" festgehalten werden, ob die Erzeugung der Logdatei erfolgreich war oder nicht (1|0) Ich habe diese Aufgabe ein wenig geskriptet und kam schnell zum "richtigen" Ergebnis, allerdings fiel mir auf, dass es keine Fehlersicherheit gab. Sprich, wenn nicht in die Log-Datei geschrieben wird, diese aber dennoch besteht, dann wird der LogFileCreation-Key nicht auf "0" gesetzt. Was ich meine wird bestimmt deutlich, wenn man sich den Code betrachtet. Diese Lücke wurde von mir mittels Vergleich der Zeilenanzahl in der Log-Datei und einer Vergleichs-Datei (copy von Log) geschlossen, wobei dann folgendes, für mich leider unlösbares Problem auftrat. Sobald die neu geschriebene Datei von 9 auf 10 Zeilen springt (die Vergleichsdatei bleibt hierbei auf 9), kann kein anständiger Vergleich mehr stattfinden. Selbiges geschieht beim Sprung von 99 auf 100 usw. Hat irgendjemand eine Idee, wie sich dieses Problem lösen lässt? Da ich noch Anfänger bin, würde ich ungern mein Skript komplett umcoden, da dies sicherlich unglaubwürdig wäre, aber dennoch würde ich das Problem gerne irgendwie lösen! Hier der Code: @echo off setlocal ::Variablen definieren set logfile=log.log set registry=HKLM\Software\sepago set key=LogFilePath set crea=LogFileCreation set filepath=C:\Windows\System32\LogFiles\RegistryTest\ set vergleich=C:\Windows\System32\LogFiles\RegistryTest\Vergleich\ set /a "counter=0" set /a "counter2=0" ::Hauptroutine call :Renew call :Create call :Check call :Find call :Write call :Count call :Writecheck goto FIN ::Logfile-Creation Key Löschung :Renew reg query %registry% /v %crea% 2>nul if %errorlevel% EQU 0 (reg delete %registry% /v %crea% /f) else goto :eof goto :eof ::Vergleichsdater erstellen :Create if Not Exist %vergleich%%logfile% (echo. >> %vergleich%%logfile%) else goto :eof goto :eof ::Check des Registry-Eintrags :Check reg query %registry% /v %key% 2>nul if %errorlevel% NEQ 0 (reg add %registry% /v %key% /d %filepath% /f) else goto :eof goto :eof ::Finden des Pfades :Find for /f "tokens=3" %%i in ('reg query %registry% /v %key%') do set location=%%i goto :eof ::Ausgabe in der Logdatei :Write echo %date% %time% Test der LogFile-RegistryPfad-Aufgabe. >> %location%%logfile% goto :eof ::Zählen der Zeilen der Logdatei und der Vergleichslogdatei :Count FOR /F %%A IN (%location%%logfile%) DO SET /A "Counter+=1" echo %Counter% Zeilen FOR /F %%B IN (%vergleich%%logfile%) DO SET /A "Counter2+=1" echo %Counter2% Zeilen goto :eof ::Schreiben in den Logfile-Creation Key :Writecheck if "%Counter%" GTR "%Counter2%" ( copy %location%%logfile% %vergleich%%logfile% reg add %registry% /v %crea% /d 1 >nul ) else ( echo Die Logdatei wurde nicht fortgeschrieben. Bitte vergleichen Sie Log-Datei und Vergleichsdatei selbstaendig. reg add %registry% /v %crea% /d 0 >nul ) goto :eof :FIN endlocal Sollte die Zeilenanzahl Log-File < Zeilenanzahl Vergleichsfile sein, wird mit jeder Skriptausführung der Log-File eine Zeile hinzugefügt, so dass sich die Zeilenanzahlen wieder annähern, was letztendlich ein falsches Ergebnis liefern wird, aber diesem Problem würde ich mich erst nach der Lösung des 10/100/1000-Problems annehmen. Vielen Dank vorab für jedwede Hilfe und schöne Grüße, Richie Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
RichieSambuca Geschrieben 13. Januar 2011 Autor Teilen Geschrieben 13. Januar 2011 Hallo Leute, konnte das Problem lösen, auch wenn es vielleicht irgendwie feiner gegangen wäre. Meine Counter unter dem Punkt "Variablen definieren" habe ich auf 10000 gesetzt, so dass, solange die Zeilenanzahl nicht auf 100000 springt, alles ganz normal und richtig ausgelesen wird. Vorher war ja das Problem, dass das Programm 10 (wegen der 1 vorne) als kleiner 2 interpretiert hat. Konnte das andere Problem bezüglich des Fortschreibens, obwohl die Log-Datei kleiner als die Vergleichs-Datei war auch beheben, indem ich den Aufruf der Routinen ein wenig umgestellt habe. Falls einem eine bessere Lösung als Counter hochsetzen einfällt, kann er / sie sich gerne bei mir melden, ansonsten trotzdem danke. ;-) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.