Verzeichnisvergleich funktioniert, Laufzeit aber viel zu lang!
Hallo Leute,
ich hatte von meinem Chef die Aufgabe bekommen eine Batch zu programmieren, die eine Verzeichnisstruktur inklusive Dateien auf Unterschiede prüft und diese Unterschiede in einer Log-Datei festhält. Das ganze ist unter Windows 7 entstanden mit Hilfe von Linux-Bashbefehlen wie egrep und rm. Also bitte nicht wundern, wenn diese Befehle auftauchen.
Ich bin absolut kein Batch-Profi, ehrlich gesagt habe ich mit dieser Aufgabe gerade erst begonnen mich mit Batch zu befassen. Der Quellcode, den ich generiert habe funktioniert, ist aber meines Erachtens nach zu redundant und ineffektiv. Allerdings weiß ich nicht, wie ich das soweit komprimieren kann, dass auch ein Zeitvorteil dabei rausspringt.
Eckdaten:
- Laufzeit: knapp 4 Stunden
- Prüfung: 20.000 Verzeichnisse und 26.000 Dateien
Könnt ihr mir vielleicht einen Tipp geben, wie ich Redundanz vermeide?
Vielen Dank im Voraus...
ich hatte von meinem Chef die Aufgabe bekommen eine Batch zu programmieren, die eine Verzeichnisstruktur inklusive Dateien auf Unterschiede prüft und diese Unterschiede in einer Log-Datei festhält. Das ganze ist unter Windows 7 entstanden mit Hilfe von Linux-Bashbefehlen wie egrep und rm. Also bitte nicht wundern, wenn diese Befehle auftauchen.
Ich bin absolut kein Batch-Profi, ehrlich gesagt habe ich mit dieser Aufgabe gerade erst begonnen mich mit Batch zu befassen. Der Quellcode, den ich generiert habe funktioniert, ist aber meines Erachtens nach zu redundant und ineffektiv. Allerdings weiß ich nicht, wie ich das soweit komprimieren kann, dass auch ein Zeitvorteil dabei rausspringt.
Eckdaten:
- Laufzeit: knapp 4 Stunden
- Prüfung: 20.000 Verzeichnisse und 26.000 Dateien
Könnt ihr mir vielleicht einen Tipp geben, wie ich Redundanz vermeide?
Vielen Dank im Voraus...
@ECHO OFF & setlocal enabledelayedexpansion
echo Startzeit: %TIME% >> laufzeit.txt
cls
Path %Path%;.\bin
if not exist .\_archiv (
md _archiv
)
if not exist .\_logs (
md _logs
)
del .\_archiv\alt.txt 2>nul
ren .\_archiv\neu.txt alt.txt 2>nul
dir /S \\Server\Verzeichnis > .\_archiv\logn.txt
for /f "tokens=*" %%I in (.\_archiv\logn.txt) do (
set string=%%I
echo "!string!" | findstr /C:"Verzeichnis von" >nul
if not ERRORLEVEL 1 (
set di=%%I
set "di=!di:Verzeichnis von \\Server=!"
) else (
echo !di! %%I >> .\_archiv\logg.txt
)
)
egrep -w "[0-3][0-9].[0-1][0-9]" .\_archiv\logg.txt >> .\_archiv\neu.txt
rm .\_archiv\logg.txt
rm .\_archiv\logn.txt
echo ==================================================== >> .\_logs\log.txt
echo Datum der Ueberpruefung: %DATE% , %TIME% >> .\_logs\log.txt
echo ==================================================== >> .\_logs\log.txt
echo. >> .\_logs\log.txt
for /f "tokens=*" %%J in (.\_archiv\neu.txt) do (
find "%%J" .\_archiv\alt.txt > nul 2>&1
if ERRORLEVEL 1 echo %%J >> .\_logs\log.txt
)
echo. >> .\_logs\log.txt
echo. >> .\_logs\log.txt
echo Endzeit: %TIME% >> laufzeit.txt
pause
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264740
Url: https://administrator.de/contentid/264740
Ausgedruckt am: 23.11.2024 um 05:11 Uhr
4 Kommentare
Neuester Kommentar
Moin,
ich würde es statt mit Batch mit Powershell versuchen:
Aus der Hüfte, leider keine Zeit für Tests.
Gruß,
Dani
ich würde es statt mit Batch mit Powershell versuchen:
$strFolderA = Get-ChildItem -Path "C:\Temp\a\*.*" -Recurse
$strFolderB = Get-ChildItem -Path "C:\Temp\b\*.*" -Recurse
Compare-Object –ReferenceObject $strFolderA –DifferenceObject $strFolderB -Property LastWriteTime, FullName | Out-File C:\Temp\compare.txt
Knapp 4 Stunden.
Gut, das hängt von der Hardware ab.Gruß,
Dani
Nun man kann sich natürlich so hinsetzen, wie du es gemacht hast, und das selber programmieren. Es schadet nichts und ist allemal eine gute Übung!
Allerdings gibt es diese Programmart schon lange in vielen Variationen, man muss da also nicht das Rad neu erfinden, wenn man denn nicht will. Die bekanntesten Vertreter solcher File System Monitoring Tools sind Tripwire, AIDE und Samhain, OSSEC/Splunk. Der Markt gibt da sehr viel her.
Allerdings gibt es diese Programmart schon lange in vielen Variationen, man muss da also nicht das Rad neu erfinden, wenn man denn nicht will. Die bekanntesten Vertreter solcher File System Monitoring Tools sind Tripwire, AIDE und Samhain, OSSEC/Splunk. Der Markt gibt da sehr viel her.
Moin,
ich nehm für sowas Beyond Compare, ist rasend schnell auch auf schwacher Hardware, kennt diverse Vergleichsmethoden, und lässt sich natürlich auch Scripten, inkl. customizable Reports.
Kann ich wärmstens empfehlen.
Gruß jodel32
ich nehm für sowas Beyond Compare, ist rasend schnell auch auf schwacher Hardware, kennt diverse Vergleichsmethoden, und lässt sich natürlich auch Scripten, inkl. customizable Reports.
Kann ich wärmstens empfehlen.
Gruß jodel32