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

VBScript um Dateien zu vergleichen (fast) fertig

Frage Entwicklung VB for Applications

Mitglied: gdnmarc

gdnmarc (Level 1) - Jetzt verbinden

06.07.2008, aktualisiert 17:46 Uhr, 7441 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 ..
Neuester Wissensbeitrag
Festplatten, SSD, Raid

12TB written pro SSD in 2 Jahren mit RAID5 auf Hyper-VServer

Erfahrungsbericht von Lochkartenstanzer zum Thema Festplatten, SSD, Raid ...

Ähnliche Inhalte
Batch & Shell
gelöst 2 große TXT Dateien vergleichen und Unterschiede in andere Datei schreiben (6)

Frage von sid.pdm zum Thema Batch & Shell ...

Batch & Shell
gelöst Batch Änderungsdatum von Dateien vergleichen und ältere löschen (10)

Frage von 129528 zum Thema Batch & Shell ...

Batch & Shell
gelöst Powershell - Dateien aus verschiedenen Arrays - Attribute vergleichen (5)

Frage von Giffas zum Thema Batch & Shell ...

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

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

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