hein-nieh
Goto Top

VBScript - Netzlaufwerk von gemappten Laufwerk unterscheiden

Netzwerklaufwerk vom gemappten Laufwerk unterscheiden

Hallo,

ich hoffe, dass ich hier im richtigen Forenbereich bin.
Mein Problem

In VBScript erhalte ich 2 absolute Pfade.
Nun möchte ich unterscheiden, ob die beiden Pfade identisch sind.
Hierbei benötige ich eine Lösung, um auch gemappte Pfade zu unterscheiden.

z.B.
U:\Eigene Dateien\Test und
\\MickeyMouse.local\user\home\Meier\Eigene Dateien

koenne ja das selbe Verzeichnis sein.
Ueber einen stringbasierten Verzeichnisvergleich komme ich nicht weiter.

Wie kann ich das in VBscript loesen.
Ueber einen Lösungsansatz waere ich sehr dankbar.

Gruss Hein_nieH

Content-ID: 216476

Url: https://administrator.de/contentid/216476

Ausgedruckt am: 16.11.2024 um 03:11 Uhr

bastla
bastla 09.09.2013 aktualisiert um 19:43:11 Uhr
Goto Top
Hallo Hein-nieH!

Die Methode "EnumNetworkDrives" von "WScript.Network" könnte (zusammen mit einem "Replace()") helfen ...

Grüße
bastla
rubberman
rubberman 09.09.2013 aktualisiert um 23:53:58 Uhr
Goto Top
Hallo Hein-nieH.

U:\Eigene Dateien\Test und
\\MickeyMouse.local\user\home\Meier\Eigene Dateien

koenne ja das selbe Verzeichnis sein.
Naja, nicht wirklich. Das Verzeichnis "Test" sollte dann auch im Netzwerkpfad erscheinen.

Ansonsten hat bastla aber die richtigen Stichworte genannt. Den Test kannst du in einer Funktion abwickeln, die dir einen Wahrheitswert zurückgibt.
Beispiel:
Option Explicit

Const strPath1 = "U:\Eigene Dateien\Test"  
Const strPath2 = "\\MickeyMouse.local\user\home\Meier\Eigene Dateien\Test"  

If NetPathCompare(strPath1, strPath2) Then
  WScript.Echo "Gleich"  
Else
  WScript.Echo "Ungleich"  
End If


Function NetPathCompare(ByVal strPath_1, ByVal strPath_2)
  NetPathCompare = False

  ' Der einfachste Fall ... Textvergleich.  
  If StrComp(strPath_1, strPath_2, vbTextCompare) = 0 Then
    NetPathCompare = True
    Exit Function
  End If

  ' Ansonsten versuchen Netzlaufwerke aufzulösen.  
  Dim colDrives, strDrive_1, strDrive_2, strShare_1, strShare_2, i
  strDrive_1 = Left(strPath_1, 2)
  strDrive_2 = Left(strPath_2, 2)
  strShare_1 = strDrive_1
  strShare_2 = strDrive_2
  Set colDrives = CreateObject("WScript.Network").EnumNetworkDrives  
  For i = 0 To colDrives.Count - 1 Step 2
    If StrComp(strDrive_1, colDrives.Item(i), vbTextCompare) = 0 Then
      strShare_1 = colDrives.Item(i + 1)
    End If
    If StrComp(strDrive_2, colDrives.Item(i), vbTextCompare) = 0 Then
      strShare_2 = colDrives.Item(i + 1)
    End If
  Next
  strPath_1 = Replace(strPath_1, strDrive_1, strShare_1, 1, 1, vbTextCompare)
  strPath_2 = Replace(strPath_2, strDrive_2, strShare_2, 1, 1, vbTextCompare)
  If StrComp(strPath_1, strPath_2, vbTextCompare) = 0 Then NetPathCompare = True
End Function
Voraussetzung dafür, dass das funktionieren kann ist, dass die Netzlaufwerke auf deinem PC genauso gemappt sind, wie auf der Quelle, von der du die Pfade beziehst.

Grüße
rubberman
manuel-r
manuel-r 10.09.2013 um 00:35:40 Uhr
Goto Top
Man könnte in Pfad/Laufwerk 1 eine Textdatei erstellen und danach prüfen, ob eben diese Textdatei in Pfad/Laufwerk 2 jetzt auch existiert. Falls ja handelt es sich um das gleiche Ziel bzw. die gleiche Ressource
Nur mal so als Idee...
Hein-nieH
Hein-nieH 10.09.2013 um 09:58:41 Uhr
Goto Top
Hallo Bastla,

die Idee ist gut und funktioniert bei mir auch.
Ich habe eine for each Schleife über EnumNetworkdrives laufen lassen und gepfüft, ob mein Dateipfad mit dem
Namen des Netzwerkpfades beginnt. Wenn ja, dann habe ich den Netzwerkpfad durch das gemappte Laufwerk
ersetzt.
Irgendwie bin ich gestern bei der Lösungssuche nicht drauf gekommen.

Gruss Hein-nieH
Hein-nieH
Hein-nieH 10.09.2013 um 10:00:26 Uhr
Goto Top
Hallo Manuel-r,

die Idee ist gut und einfach nachvollziehbar.
Ich habe mich für die Lösung von Bastls entschieden.

Trotzdem vielen Dank.
Gruss Hein-nieH