Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Verzeichnisvergleich funktioniert, Laufzeit aber viel zu lang!

Frage Entwicklung Batch & Shell

Mitglied: Letzify

Letzify (Level 1) - Jetzt verbinden

27.02.2015, aktualisiert 09:31 Uhr, 712 Aufrufe, 4 Kommentare

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

01.
@ECHO OFF & setlocal enabledelayedexpansion 
02.
 
03.
echo Startzeit: %TIME% >> laufzeit.txt 
04.
cls 
05.
 
06.
Path %Path%;.\bin 
07.
 
08.
if not exist .\_archiv ( 
09.
   md _archiv 
10.
11.
 
12.
if not exist .\_logs ( 
13.
   md _logs 
14.
15.
 
16.
del .\_archiv\alt.txt 2>nul 
17.
ren .\_archiv\neu.txt alt.txt  2>nul 
18.
 
19.
dir /S \\Server\Verzeichnis > .\_archiv\logn.txt 
20.
for /f "tokens=*" %%I in (.\_archiv\logn.txt) do ( 
21.
 
22.
set string=%%I 
23.
echo "!string!" | findstr /C:"Verzeichnis von" >nul 
24.
 
25.
if not ERRORLEVEL 1 ( 
26.
  set di=%%I 
27.
  set "di=!di:Verzeichnis von \\Server=!" 
28.
  ) else ( 
29.
     echo !di! %%I >> .\_archiv\logg.txt 
30.
31.
32.
 
33.
egrep -w "[0-3][0-9].[0-1][0-9]" .\_archiv\logg.txt >> .\_archiv\neu.txt 
34.
 
35.
rm .\_archiv\logg.txt 
36.
rm .\_archiv\logn.txt 
37.
 
38.
echo ==================================================== >> .\_logs\log.txt 
39.
echo Datum der Ueberpruefung: %DATE% , %TIME% >> .\_logs\log.txt 
40.
echo ==================================================== >> .\_logs\log.txt 
41.
 
42.
echo. >> .\_logs\log.txt 
43.
for /f "tokens=*" %%J in (.\_archiv\neu.txt) do ( 
44.
 find "%%J" .\_archiv\alt.txt > nul 2>&1 
45.
  if ERRORLEVEL 1 echo %%J >> .\_logs\log.txt 
46.
47.
echo. >> .\_logs\log.txt 
48.
echo. >> .\_logs\log.txt 
49.
 
50.
echo Endzeit: %TIME% >> laufzeit.txt 
51.
pause
Mitglied: Dani
27.02.2015, aktualisiert um 09:14 Uhr
Moin,
ich würde es statt mit Batch mit Powershell versuchen:
01.
$strFolderA = Get-ChildItem -Path "C:\Temp\a\*.*" -Recurse 
02.
$strFolderB = Get-ChildItem -Path "C:\Temp\b\*.*" -Recurse 
03.
 
04.
Compare-Object –ReferenceObject $strFolderA –DifferenceObject $strFolderB -Property LastWriteTime, FullName | Out-File C:\Temp\compare.txt
Aus der Hüfte, leider keine Zeit für Tests.

Knapp 4 Stunden.
Gut, das hängt von der Hardware ab.


Gruß,
Dani
Bitte warten ..
Mitglied: Letzify
27.02.2015 um 09:30 Uhr
Gut, der Arbeitslaptop ist wirklich etwas schwach auf der Brust. Mit 2GB Arbeitsspeicher und einem Core-2-Duo P8700 gehört er sicher nicht zu der Elite :D

Ich habe leider keine Berechtigung die Powershell aufzurufen - man muss vielleicht auch dazu sagen, dass ich Dualstudent bin und den Bereich hier nur für drei Monate unterstütze. Ist es auch ohne Powershell möglich?

Hinterher soll die Batch als Job von Windows auf einem Server ausgeführt werden.
Bitte warten ..
Mitglied: Gentooist
27.02.2015 um 12:44 Uhr
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.
Bitte warten ..
Mitglied: 114757
01.03.2015, aktualisiert um 10:02 Uhr
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
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
Router & Routing
Transparenter Proxy funktioniert nicht? (1)

Frage von mrserious73 zum Thema Router & Routing ...

Linux
LTSP: PXE Boot funktioniert nicht (23)

Frage von Fenris14 zum Thema Linux ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (32)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...