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
GELÖST

Vergleichen eines längeren Strings mit einem Kürzeren

Frage Entwicklung VB for Applications

Mitglied: milo86

milo86 (Level 1) - Jetzt verbinden

10.03.2009, aktualisiert 09:01 Uhr, 3415 Aufrufe, 4 Kommentare

Hallo zusammen,

für mein Vorhaben benötige ich ein VBS, welches einen längeren String mit einem Kürzeren vergleicht.
Gegeben ist ein Active Directory und ein dazugehöriges Distributed File System.

Vom AD bekomm ich folgende Daten nach einer Abfrage in eine Textdatei:
user1
user2
user3
user5

Aus dem DFS bekomm ich folgende Daten:
\\sub.pfad\abteilung\user1
\\sub.pfad\abteilung\user2
\\sub.pfad\abteilung\user4
\\sub.pfad\abteilung\user5

Mein bisheriger Code:
01.
Set objFSO = CreateObject("Scripting.FileSystemObject") 
02.
Set objFile1 = objFSO.OpenTextFile("ad.txt", 1) 
03.
If objFSO.getfile("ad.txt").size > 0 Then 
04.
strComp = lcase(objFile1.ReadAll) 
05.
End If 
06.
objFile1.Close 
07.
 
08.
Set objFile2 = objFSO.OpenTextFile("share.txt", 1) 
09.
Do Until objFile2.AtEndOfStream 
10.
    strComp2 = lcase(objFile2.ReadLine) 
11.
    If InStr(strComp,strComp2) = 0 Then 
12.
        strResult = strResult & strComp2 & vbCrLf 
13.
    End If 
14.
Loop 
15.
objFile2.Close
Oben stehenden Code hab ich 2 mal in einer vbs Datei.
Beim einen werden die Pfade mit den Usern abgeglichen.
Da erhalte ich wenn ein User kein Share hat den User als Ergebnis in einer txt Datei. (Wird für die weitere Verarbeitung verwendet.)
Beim umgedrehten Fall hab ich das Problem, dass die User mit den Pfaden verglichen werden.
Das geht ja so ohne weiteres leider nicht.
Ich bekomme als Ergebnis immer alle Übereinstimmungen ausgegeben.
Dabei brauche ich aber die Pfade, die keine User zugeordnet haben. (In dem Fall als Ergebnis \\sub.pfad\abteilung\user4)

Habt Ihr eine Idee, wie man das umsetzen kann?

Beste Grüße
Oliver
Mitglied: bastla
10.03.2009 um 10:17 Uhr
Hallo milo86 und willkommen im Forum!

Wenn Du für jeden "share"-String nur den Teil nach dem letzten "\" vergleichen willst, kannst Du diesen Teil zB so erhalten:
If InStr(strComp2, "\") > 0 Then strComp2 = Mid(strComp2, InStrRev(strComp2, "\") + 1)
Um einen gesicherten Vergleich mit den einzelnen Zeilen von strComp zu erhalten, würde ich an den Anfang und das Ende von strComp noch ein vbCrLf setzen (damit ist jede Zeile mit Usernamen von Zeilenschaltungen umgeben) und dann als Suchbegriff
vbCrLF & strComp2 & vbCrLf
verwenden - so kannst Du verhindern, dass ein User "huber" gefunden wird, obwohl es nur einen "mayerhuber" gibt.

Grüße
bastla
Bitte warten ..
Mitglied: milo86
10.03.2009 um 11:17 Uhr
Hallo bastla,

vielen Dank für die Willkommensgrüße und für Deine schnelle Hilfe!
Ich hab\'s anhand Deiner Vorgabe wie folgt geschrieben:
01.
If InStr(strComp2, "\") > 0 Then  
02.
strComp2_cut = Mid(strComp2, InStrRev(strComp2, "\") + 1) 
03.
    If InStr(strComp,strComp2_cut) = 0 Then 
04.
        strResult = strResult & strComp2 & vbCrLf 
05.
	End If 
06.
End If
Funktioniert auch wunderbar!
Kannst Du mir bitte etwas erklären, was Deine Zeile Code macht?

Es tat sich ein zweites Problem auf.
Ich lese die Shares aus dem DFS mittels Batch und "dir" aus.
Es gibt ein Share (mein eigenes) in welches ich reingucken darf.
Der Pfad sieht dann so aus: \\sub.pfad\abteilung\mein_user\\eigene dateien\\test

Kann ich meinen eigenen User ausschließen? Weil alle meine Unterordner werden natürlich auch als Ergenis ausgegeben, da der User nicht am Ende steht.

Ist es möglich auch von \\sub.pfad\abteilung\user1 die Abteilung auszulesen?

Grüße
Oliver
Bitte warten ..
Mitglied: bastla
10.03.2009 um 13:38 Uhr
Hallo milo86!

Abteilung auslesen: Wenn es um den (unter Berücksichtigung des Trennzeichens "\") vierten Teil des Strings geht (die beiden "\" am Beginn des Pfades werden einzeln gezählt), dann etwa so:
strComp2 = Split(lcase(objFile2.ReadLine), "\")(3)
3 deshalb, weil Split() ein 0-basiertes Array erzeugt (erstes Element hat demnach Index 0).
Kurze Erklärung zum vorher geposteten Code:
InStrRev() sucht nach dem ersten Vorekommen von "\", beginnt allerdings am Ende des Strings (sucht also von rechts nach links). Die Zeichenposition der Fundstelle wird aber, wie von InStr() her gewohnt, von links gezählt.
Da der gefundene "\" nicht benötigt wird, Position um 1 erhöhen und mit Mid() ab dieser Position bis zum Ende (daher keine Angabe der Länge des gewünschten Teilstrings) den Rest des Strings als Ergebnis verwenden.

Grüße
bastla
Bitte warten ..
Mitglied: milo86
10.03.2009 um 18:33 Uhr
Hallo bastla,

vielen Dank für Deine Ausführung. Das sollte erstmal ausreichen um ein Script zu schreiben, welches meinen Bedürfnissen genügt.
Wenn es fertig ist, schreib ich nochmal.

Vielen Dank und Grüße
Oliver
Bitte warten ..
Ähnliche Inhalte
Batch & Shell
Vergleiche Strings in CMD
gelöst Frage von it4baerBatch & Shell4 Kommentare

Hallo, ich möchte gerne Strings in CMD vergleichen (also Windows Eingebaaufforderung) genau gesagt übergebe ich 1. eine Parameter meinBatch.cmd ...

Batch & Shell
String automatisch anpassen (erweitern oder kürzen)
gelöst Frage von CreatorXBatch & Shell9 Kommentare

Hallo an alle, folgendes Problem: Ich lasse in meinem Batchscript eine Textdatei Zeile für Zeile auslesen. Nun möchte ich ...

Batch & Shell
Batch String ab flexiebler Länge in fixer Länge Zeichen auslesen oder extrahiere aus String ab der Stelle XXX in der Länge YYY
gelöst Frage von 86longrunnerBatch & Shell2 Kommentare

Hallo, ins Forum, als Newbie hier meine erste Frage und freue mich auf eure Unterstützung: nach langem Suchen habe ...

VB for Applications
Excel VBA - Strings vergleichen und Unterschiede markieren
gelöst Frage von chef1568VB for Applications3 Kommentare

Hallo, ich schreibe mir gerade ein VB-Script für Excel dass 2 XML-Dateien miteinander vergleicht und die Unterschiede in einer ...

Neue Wissensbeiträge
Mac OS X

MacOS wo ist die Tilde ?

Tipp von Alchimedes vor 12 StundenMac OS X1 Kommentar

Hallo, ich hab eine MacOS qwertz Keyboard auf US Layout umgestellt da die Sonderzeichen besser erreichbar sind. Leider fehlt ...

Datenschutz

Weitere Informationen zum Sicherheitsproblem BeA

Information von Penny.Cilin vor 19 StundenDatenschutz

Im folgenden ein weiterer Bericht über die Sicherheitsprobleme von Bea. Fataler Konstruktionsfehler im besonderen elektronischen Anwaltspostfach Gruss Penny

Windows 10

Systemdienste behalten nach Win10 inplace-Upgrade nicht die ggf. modifizierte Startart bei

Tipp von DerWoWusste vor 21 StundenWindows 103 Kommentare

Stellt Euch vor, Ihr habt ein Win10 System und modifiziert dort die Startart von Systemdiensten. Zum Beispiel wollt Ihr ...

Microsoft Office

Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei

Anleitung von SarekHL vor 1 TagMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...

Heiß diskutierte Inhalte
Netzwerke
NTFS-Berechtigung
Frage von Daoudi1973Netzwerke23 Kommentare

Hallo zusammen und frohes neues Jahr (Sorry, ich bin spät dran) Meine Frage: 1- Ich habe einen Ordner im ...

Batch & Shell
AD-Abfrage in Batchdatei und Ergebnis als Variable verarbeiten
gelöst Frage von Winfried-HHBatch & Shell19 Kommentare

Hallo in die Runde! Ich habe eine Ergänzungsfrage zu einem alten Thread von mir. Ausgangslage ist die Batchdatei, die ...

Windows 10
Netbook erkennt Soundkarte nicht - keinerlei Info zum Hersteller und Modell vom Netbook und Hardware bekannt
Frage von fyrb38Windows 1018 Kommentare

Guten Tag, meine Schwester reist in einigen Wochen für ein paar Monate ins Ausland und hat sich dafür ein ...

Microsoft Office
Deaktivieren von Startbildschirm und Backstage-Ansicht in Office 2016 per Batch-Datei
Anleitung von SarekHLMicrosoft Office17 Kommentare

Guten Morgen zusammen! Ich habe mir gestern (auch mit Hilfe dieses Boards) ein Script gebastelt, um in Office 2016 ...