Zum Inhalt springen

Fehler beim Vergleich Zeilenanzahl


RichieSambuca

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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. ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

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

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

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

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...