Top-Themen

Aktuelle Themen (A bis Z)

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

VBScript um Dateien zu vergleichen (fast) fertig

Mitglied: gdnmarc

gdnmarc (Level 1) - Jetzt verbinden

06.07.2008, aktualisiert 17:46 Uhr, 7481 Aufrufe, 3 Kommentare

Hallo Forum,

ich bin leider ein Anfänger und mir fehlt eine Kleinigkeit in meinem Script. Ich möchte zwei Dateien vergleichen und veränderte Zeilen in eine neue Datei ausgeben. Das Script funktioniert aber nur wenn ich die beiden oberen Zeilen zur Variablendeklaration deaktivere, aber warum?

VIELEN DANK!!!

Marc


'Option Explicit
'Dim objFSO, strlastapps, strqueryapps, strFilePath, objF1, objF2, objL1, objL2, WshShell

Const ForWriting = 2
Const OpenAsASCII = 0
Const CreateIfNotExist = True

strlastapps = "lastapps.txt"
strqueryapps = "queryapps.txt"
strFilePath = "newapps.txt"

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objF1 = objFSO.OpenTextFile(strlastapps)
Set objF2 = objFSO.OpenTextFile(strqueryapps)
Set objL1 = CreateObject("Scripting.Dictionary")
objL1.CompareMode = vbTextCompare
Set objL2 = CreateObject("Scripting.Dictionary")
objL2.CompareMode = vbTextCompare

' Open the file for write access.
On Error Resume Next
Set objFile = objFSO.OpenTextFile(strFilePath, _
ForWriting, CreateIfNotExist, OpenAsASCII)

' Read first file adding unique value to dictionary object.
Do Until objF1.AtEndOfStream
strV = objF1.ReadLine
If (objL1.Exists(strV) = False) Then
objL1.Add strV, True
End If
Loop
objF1.Close

' Read the second file.
Do Until objF2.AtEndOfStream
strV = objF2.ReadLine
If (objL1.Exists(strV) = False) And (objL2.Exists(strV) = False) Then
objFile.WriteLine strV
End If
' Remove duplicates.
If (objL1.Exists(strV) = True) Then
objL1.Remove strV
End If
' Add unique values to 2nd dictionary object.
If (objL2.Exists(strV) = False) Then
objL2.Add strV, True
End If
Loop
objF2.Close
objFile.Close
Mitglied: bastla
06.07.2008 um 14:53 Uhr
Hallo gdnmarc und willkommen im Forum!

Vielleicht wird's besser, wenn Du auch "objFile" und "strV" deklarierst.

Grüße
bastla

P.S.: Für das Posten von Scripts gibt es hier <code>-Tags ...
Bitte warten ..
Mitglied: gdnmarc
06.07.2008 um 15:32 Uhr
Prima!!! BESTEN DANK das funktioniert jetzt, ich habe jetzt inzwischen noch ein anderes Script erstellt welches auch funktioniert, füge ich es aber zu einem anderen Script hinzu, bleibt die auszugebende Datei immer leer. Führe ich die beiden Scripte separat aus funktioniert alles. Vielleicht habt ihr noch eine Idee? Was genau mache ich falsch, alleine funktionieren odch beide Scripte??? Es wird auch kein Fehler ausgegen, sondern das zu erstellende File newapss.log wird zwar erstellt, bleibt aber einfach leer....

Script1:
01.
Option Explicit 
02.
Dim objFSO, strlastapps, strqueryapps, strnewapps, WshShell 
03.
 
04.
strlastapps = "LastApps.log" 
05.
strqueryapps = "QueryApps.log" 
06.
strnewapps = "NewApps.log" 
07.
 
08.
'LastApps 
09.
 
10.
Const OverwriteExisting = True 
11.
 
12.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
13.
 
14.
If not objFSO.FileExists(strlastapps) Then 
15.
   objFSO.CreateTextFile strlastapps  
16.
End If 
17.
 
18.
If not objFSO.FileExists(strqueryapps) Then 
19.
   objFSO.CreateTextFile strqueryapps  
20.
Else 
21.
   objFSO.CopyFile strqueryapps, strlastapps, OverwriteExisting 
22.
   objFSO.DeleteFile strqueryapps 
23.
   objFSO.CreateTextFile strqueryapps 
24.
End If 
25.
 
26.
'QueryApps 
27.
 
28.
Set WshShell = WScript.CreateObject("WScript.Shell") 
29.
WshShell.Run "sftmime query obj:app /global /short /LOG:QueryApps.log"
Script2:
01.
Option Explicit 
02.
Dim objFSO, objFile1, objFile2, objFile3, strqueryappsDevices, strAddress, strNotqueryapps 
03.
 
04.
Const ForReading = 1 
05.
 
06.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
07.
Set objFile1 = objFSO.OpenTextFile("LastApps.log", ForReading) 
08.
 
09.
strqueryappsDevices = objFile1.ReadAll 
10.
objFile1.Close 
11.
 
12.
Set objFile2 = objFSO.OpenTextFile("QueryApps.log", ForReading) 
13.
 
14.
Do Until objFile2.AtEndOfStream 
15.
    strAddress = objFile2.ReadLine 
16.
    If InStr(strqueryappsDevices, strAddress) = 0 Then 
17.
        strNotqueryapps = strNotqueryapps & strAddress & vbCrLf 
18.
    End If 
19.
Loop 
20.
 
21.
objFile2.Close 
22.
 
23.
'Wscript.Echo "New Apps: " & vbCrLf & strNotqueryapps 
24.
 
25.
Set objFile3 = objFSO.CreateTextFile("NewApps.log") 
26.
 
27.
objFile3.WriteLine strNotqueryapps 
28.
objFile3.Close
Script3 (Script 1+2 zusammen):
01.
Option Explicit 
02.
Dim objFSO, strlastapps, strqueryapps, WshShell 
03.
Dim objFile1, objFile2, objFile3, strqueryappsDevices, strAddress, strNotqueryapps 
04.
 
05.
strlastapps = "LastApps.log" 
06.
strqueryapps = "QueryApps.log" 
07.
 
08.
 
09.
'LastApps 
10.
 
11.
Const OverwriteExisting = True 
12.
 
13.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
14.
 
15.
If not objFSO.FileExists(strlastapps) Then 
16.
   objFSO.CreateTextFile strlastapps  
17.
End If 
18.
 
19.
If not objFSO.FileExists(strqueryapps) Then 
20.
   objFSO.CreateTextFile strqueryapps  
21.
Else 
22.
   objFSO.CopyFile strqueryapps, strlastapps, OverwriteExisting 
23.
   objFSO.DeleteFile strqueryapps 
24.
   objFSO.CreateTextFile strqueryapps 
25.
End If 
26.
 
27.
'QueryApps 
28.
 
29.
Set WshShell = WScript.CreateObject("WScript.Shell") 
30.
WshShell.Run "sftmime query obj:app /global /short /LOG:QueryApps.log" 
31.
 
32.
'NewApps 
33.
 
34.
Const ForReading = 1 
35.
 
36.
'Set objFSO = CreateObject("Scripting.FileSystemObject") 
37.
Set objFile1 = objFSO.OpenTextFile("LastApps.log", ForReading) 
38.
 
39.
strqueryappsDevices = objFile1.ReadAll 
40.
objFile1.Close 
41.
 
42.
Set objFile2 = objFSO.OpenTextFile("QueryApps.log", ForReading) 
43.
 
44.
Do Until objFile2.AtEndOfStream 
45.
    strAddress = objFile2.ReadLine 
46.
    If InStr(strqueryappsDevices, strAddress) = 0 Then 
47.
        strNotqueryapps = strNotqueryapps & strAddress & vbCrLf 
48.
    End If 
49.
Loop 
50.
 
51.
objFile2.Close 
52.
 
53.
'Wscript.Echo "New Apps: " & vbCrLf & strNotqueryapps 
54.
 
55.
Set objFile3 = objFSO.CreateTextFile("NewApps.log") 
56.
 
57.
objFile3.WriteLine strNotqueryapps 
58.
objFile3.Close
Bitte warten ..
Mitglied: bastla
06.07.2008 um 17:46 Uhr
Hallo gdnmark!

Vorweg: Bei einem Test mit 2 geringfügig unterschiedlichen Textdateien "LastApps.log" und "QueryApps.log" und deaktivierten Zeilen 22-24 sowie 30 erhalte ich das korrekte Ergebnis: jene Zeilen, welche in "QueryApps.log", nicht aber in "LastApps.log" aufscheinen - demzufolge müsste der Fehler eigentlich beim Erzeugen der neuen "QueryApps.log" per Shell-Aufruf (den ich hier nicht nachbauen kann) liegen (oder, es gibt eben keine Unterschiede zwischen den beiden Dateien ).
Was mir noch so an Kleinigkeiten aufgefallen ist:

Du erstellst zwar Variable für die Dateinamen, verwendest diese aber dann nicht (eine Folge des Zusammenkopierens). Außerdem würde ich, soferne nichts Wesentliches dagegen spricht, nicht nur Namen, sondern auch Pfade für die Dateien festlegen.

Die Wahl des Variablennamens "strAddress" ergibt für einen, der die Inhalte der .log-Dateien nicht kennt, weniger Sinn, als wenn Du etwa "strLine" verwendet hättest - für Dich wird das aber vermutlich anders sein.

Die entstehende "NewApps.log" schließt mit zwei Leerzeilen (CrLf) - zumindest den zweiten Umbruch kannst Du leicht vermeiden, indem Du mit "Write" anstatt mit "WriteLine" in die Datei schreibst.

Grüße
bastla
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Dateien vergleichen
gelöst Frage von SpacewarpBatch & Shell4 Kommentare

Hallo, vorweg ich bin neu hier. Meine Problem ist das ich zwei TXT Dateien habe. Bsp.: -Datei1.txt- User Programm ...

Batch & Shell

Javaversion mit Batch vergleichen und Übergabe Variable an VBScript

gelöst Frage von tklineBatch & Shell4 Kommentare

Hallo Leute, Hab mal wieder ein Spezialfall für euch Profis :-) Folgender Sachverhalt: Ein selbstgeschriebenes Programm namens "Breadcrumb" schreibt ...

Batch & Shell

Batch vergleich von zwei dateien

gelöst Frage von realdavegerBatch & Shell6 Kommentare

Hallo, nach Jahrelangem zugucken, habe ich jetzt schlussendlich eine Frage welche ich selbst stelle. Ich versuche 2 zeiten aus ...

Batch & Shell

Powershell - Dateien vergleichen und ergänzen

Frage von Franz-Josef-IIBatch & Shell11 Kommentare

Guten Tag Ich bin wieder einmal bei meiner CSV dran und hänge :-( trotz Google und Co Ausgangslage ist ...

Neue Wissensbeiträge
Sicherheit

MikroTik-Router patchen, Schwachstelle wird ausgenutzt

Information von kgborn vor 16 StundenSicherheit

Am 23. April 2018 wurde von Mikrotik ein Security Advisory herausgegeben, welches auf eine Schwachstelle im RouterOS hinwies. Mikrotik ...

Windows 10

Microcode-Updates KB4090007, KB4091663, KB4091664, KB4091666 für Windows 10

Information von kgborn vor 23 StundenWindows 101 Kommentar

Kurze Information für Administratoren von Windows 10-Systemen, die mit neueren Intel CPUs laufen. Microsoft hat zum 23. April 2018 ...

iOS
Updates für Iphone und Co
Information von sabines vor 1 TagiOS

Gestern abend ist iOS 11.3.1 erschienen, ein kleineres Update, dass einige Lücken schließt und "Lahmlegen" nach einem Display Tausch ...

Windows 7

Windows 7 - Server 2008 R2: Exploit für Total Meltdown verfügbar

Information von kgborn vor 2 TagenWindows 7

Kleine Information für Administratoren, die für die Updates von Windows 7 SP1 und Windows Server 2008 R2 SP1 verantwortlich ...

Heiß diskutierte Inhalte
Batch & Shell
Powershell: Im AD nach Rechnern mit bestimmten IP-Adressen suchen
gelöst Frage von Raven42Batch & Shell36 Kommentare

Hallo zusammen, ich suche nach einer Möglichkeit nach Computern im AD zu suchen , deren IP-Adresse mit 10.11.12. beginnt. ...

C und C++
Frage1 C Programmierung-Makefile Frage2 PHP-Programmierung HTTP-Fehler 404
Frage von KatalinaC und C++34 Kommentare

Hallo, ich habe 2 Fragen, die nichts miteinander zu tun haben aber mit denen ich mich gerade beschäftige: 1. ...

LAN, WAN, Wireless
Watchguard T15 VPN Einrichtung
gelöst Frage von thomasjayLAN, WAN, Wireless25 Kommentare

Hallo zusammen, wir möchten gerne über unsere Watchguard T15 einen VPN-Tunnel (Mobile VPN with IPSec) einrichten! Als Client nutzen ...

Windows Server
Alten DC entfernen
Frage von smartinoWindows Server24 Kommentare

Hallo zusammen, ich habe hier eine Umgebung übernommen und erstmal einen DCDIAG gemacht. Dabei fällt auf, daß eine ganze ...