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, 746 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 ..
Ähnliche Inhalte
Festplatten, SSD, Raid
Laufzeit von Festplatten im RAID anzeigen (20)

Frage von 114801 zum Thema Festplatten, SSD, Raid ...

Batch & Shell
Per Script Laufzeit PC im AD hgerausfinden (6)

Frage von 14634 zum Thema Batch & Shell ...

Windows 10
gelöst PCs über eine Batch Datei nach 2 Tagen Laufzeit automatisch herunterfahren (12)

Frage von Karsten70154 zum Thema Windows 10 ...

Backup
gelöst Wie lange muss man eine Datensicherung aufbewahren ? (11)

Frage von achim222 zum Thema Backup ...

Neue Wissensbeiträge
Windows Update

Microsoft Update KB4034664 verursacht Probleme mit Multimonitor-Systemen

(3)

Tipp von beidermachtvongreyscull zum Thema Windows Update ...

Viren und Trojaner

CNC-Fräsen von MECANUMERIC werden (ggf.) mit Viren, Trojanern, Würmern ausgeliefert

(4)

Erfahrungsbericht von anteNope zum Thema Viren und Trojaner ...

Windows 10

Windows 10: Erste Anmeldung Animation deaktivieren

(3)

Anleitung von alemanne21 zum Thema Windows 10 ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
MSA 2050 RAID Konfig (20)

Frage von Leo-le zum Thema SAN, NAS, DAS ...

Hosting & Housing
CNAME auf FTP funkt nicht mehr (7)

Frage von Wintektiv zum Thema Hosting & Housing ...