Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Fehler beim Vergleich Zeilenanzahl

Empfohlene Antworten

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.