myGully.com

myGully.com (https://mygully.com/index.php)
-   Programmierung (https://mygully.com/forumdisplay.php?f=67)
-   -   VBS Script zum Ändern von Verknüpfungen (https://mygully.com/showthread.php?t=1945748)

sTarBuZz 26.11.09 03:35

VBS Script zum Ändern von Verknüpfungen
 
Hiho,
Ich habe mir mit etwas Hilfe ein S***** zusammengebastgelt, das das Ziel einer Verknüpfung ändert. Allerdings würde ich das gerne so haben, dass ich die vbs in einen Ordner mit verknüpfungen ablege, die datei ausführe und das s***** in allen vorhandenen verknüpfungen den Teil "D:\Games" durch "Y:\Games" ersetzt. Ist sowas möglich?
hier mal mein S*****:

Code:

Set sh = CreateObject("WS*****.Shell")
Set shortcut = sh.CreateShortcut("C:\blub\Shortcut.lnk")
shortcut.TargetPath = "C:\blub\spiel.exe"
Shortcut.WorkingDirectory ="C:\blub"
shortcut.Save

Ich weiß, dass dieses S***** nur eine vorgegebene Verknüpfung ändert, und den kompletten Pfad austauscht. Ich weiß nur halt nicht, wie ich im Pfad nach einem bestimmten begriff ("D:\Games") suche und diesen dann durch einen anderen begriff ("Y:\Games") ersetze.

Ich wäre sehr froh, wenn mir jemand dabei helfen könnte. Das würde mir einiges an Arbeit ersparen.

mfG sTarBuZz

haze303 26.11.09 20:00

Code:

Option Explicit

Dim WSHShell, oFSO, oFolder, oFiles, oFile, strOldPath, strNewPath, lnkName, myShortcut
Dim strTarget, strWorkD, strWDRep, strRep, crLnk, strFolder
 
Set WSHShell = WS*****.CreateObject("WS*****.Shell")
Set oFSO = WS*****.CreateObject("S*****ing.FileSystemObject")
strFolder = "C:\Users\haze\Desktop\spiele"
If oFSO.FolderExists(strFolder) Then
        Set oFolder = oFSO.GetFolder(strFolder)               
        Set oFiles = oFolder.Files                                     
        For Each oFile In oFiles                                       
                If UCASE(Right(oFile.Path,4)) = ".LNK" then                   
                        'Managing old LNK-Files
                        strOldPath = "C:\"
                        strNewPath = "E:\"
                        lnkName = oFile.Name
                        Set myShortcut = WSHShell.CreateShortcut(oFile.Path)
                        strTarget = myShortcut.targetpath
                        strWorkD = myShortcut.WorkingDirectory
                        strWDRep = Replace(strWorkD, strOldPath, strNewPath)
                        strRep = Replace(strtarget, strOldPath, strNewpath)
                        oFSO.DeleteFile lnkName
                        'Creating new LNK-File
                        Set crLnk = WSHShell.CreateShortcut(lnkName)
                        crLnk.TargetPath = strRep
                        crLnk.WorkingDirectory = strWDRep
                        crLnk.save
                End If
        Next
End If

C:\Users\haze\Desktop\spiele - Diesen Pfad musst du noch entsprechend anpassen.
Dies ist der Ordner, indem sich die Verknüpfungen deiner Spiele befinden.

C:\ - dies ist das Laufwerk, aufdem momentan die alten Verknüpfungen zeigen, wie z.B. C:\Games\Quake3
Eventuell musst du das noch ändern.

E:\ - dies ist der neue Pfad, aufdem nun deine Spiele liegen, wie z.B. E:\Games\Quake3
Eventuell musst du auch das noch entsprechend ändern.

Ablauf des S*****s


Das S***** wird in den Ordner schauen, indem deine Spiele-Verknüpfungen liegen - dort wird es sich den Zielpfad und den "Ausführen in:" Pfad holen und in Variablen abspeichern.
Im nächsten Schritt wird es deine Verknüpfungen löschen und mit den abgeänderten Variablen, nun zeigend auf das richtige Laufwerk, die Verknüpfungen wieder erstellen.
Das wars.

Bitte erstelle vor dem Ausführen des S*****s eine Sicherungskopie deiner Verknüpfungen!
Ausserdem muss das S***** in den Ordner, wo deine Spiele-Verknüpfungen liegen, reinkopiert und ausgeführt werden.

Bei Fragen oder Problemen kannst du dich gerne an mich wenden.

Und nun viel Spass damit. :)

sTarBuZz 27.11.09 07:13

Erstmal danke für die Antwort.

Ich habe allerdings noch eine Frage:
Nehmen wir mal an, mein Verknüpfungspfad ist C:\Verknüpfungen. In diesem Ordner befinden sich dann Unterordner für die Spiele (z.B.: C:\Verknüpfungen\Call Of Duty). Theoretisch müsste ich doch dann in jeden Spiele-Ordner das S***** reinkopieren oder?

Oder gibt es die Möglichkeit, das S***** in allen Unterordnern nach *.lnk Dateien suchen zu lassen?

haze303 27.11.09 10:58

Das ist möglich - ich werde mir das mal anschauen, wenn ich später wieder Zuhause bin.

VG,
haze303


EDIT:

Code:

Option Explicit

Dim WSHShell, oFSO, oFolder, oFiles, oFile, strOldPath, strNewPath, lnkName, myShortcut
Dim strTarget, strWorkD, strWDRep, strRep, crLnk, strFolder, subFolder, subFiles
 
Set WSHShell = WS*****.CreateObject("WS*****.Shell")
Set oFSO = WS*****.CreateObject("S*****ing.FileSystemObject")
strFolder = "C:\Users\haze\Desktop\spiele"
If oFSO.FolderExists(strFolder) Then
        For Each oFolder In oFSO.GetFolder(strFolder).SubFolders                                     
                For Each oFile In oFolder.Files
                            If UCASE(Right(oFile.Path,4)) = ".LNK" then                   
                        'Managing old LNK-Files
                                    strOldPath = "C:\"
                                strNewPath = "E:\"
                                lnkName = oFolder & "\" & oFile.Name
                                Set myShortcut = WSHShell.CreateShortcut(oFile.Path)
                                strTarget = myShortcut.targetpath
                                strWorkD = myShortcut.WorkingDirectory
                                strWDRep = Replace(strWorkD, strOldPath, strNewPath)
                                strRep = Replace(strtarget, strOldPath, strNewpath)
                                oFSO.DeleteFile lnkName
                        'Creating new LNK-File
                                Set crLnk = WSHShell.CreateShortcut(lnkName)
                                crLnk.TargetPath = strRep
                                crLnk.WorkingDirectory = strWDRep
                                crLnk.save
                        End If
                Next
        Next
End If

Anbei das abgeänderte S*****. Jetzt sollte das S***** deine Anforderungen erfüllen. :)

VG,
haze303

sTarBuZz 27.11.09 21:38

wenn ich das s***** jetzt in den ordner kopiere und ausführe passiert leider rein garnichts :(

haze303 27.11.09 21:45

Hast du die Pfade angepasst?

strFolder = "C:\Users\haze\Desktop\spiele"
strOldPath = "C:\"
strNewPath = "E:\"

Ich habe es bei mir getestet und das S***** änderte mir einwandfrei die Verknüpfungen.

Bzw. wie sieht dein Plan aus - welchen Pfad bzw. Laufwerksbuchstaben möchtest du von wo nach wo ändern?

sTarBuZz 27.11.09 21:50

sry mein fehler... ich hatte einen schreibfehler in strOldPath. Deswegen hat das s***** natürlich nichts zum ersetzen gefunden. Es klappt jetzt einwandfrei:)
Danke für die Hilfe.

Ich werd jetzt mal ein Tool coden, bei dem man per Gui die 3 Variablen setzen kann.
Dann hab ich auch noch was dazu beigetragen :)


EDIT: Die erste Version des Tools is fertig xD

Screenshot:


Bis jetzt kann man 3 Variablen setzen und diese werden dann in der Datei Link.vbs mit dem S***** zusammengeführt.
In der nächsten Version wird dann automatisch die link.vbs in den Zielordner mit den Verknüpfungen kopiert und von allen Ordnern und Verknüpfungen ein Backup erstellt.

Ich denke mal, dass ich morgen die Version 1.0 zum Beta-Test freigeben kann :D

mfG sTarBuZz

haze303 27.11.09 22:05

Aber gerne doch.

Wenn du den VBS*****-Weg haben möchtest, für die komfortable Eingabe der Variablen, dann sag mir einfach bescheid - ich poste dann das S***** mit den entsprechenden Änderungen.
Derweil warte ich gespannt auf deine Lösung. :)

sTarBuZz 28.11.09 10:20

soo... ich hab Version 0.8 fertiggestellt und den Link hab ich dir per PN geschickt.
Wenn du zufrieden bist, können wir ja mal gucken, wie es in der Öffentlichkeit so ankommt :)

Was meinst du eigentlich mit dem VBS*****-Weg? das würd mich auch mal interessieren.
Click.EXE ist zwar gut, aber auch kein kompletter Ersatz für ne Sprache wie C oder VB :)

haze303 29.11.09 16:56

Anbei die Lösung über den VBS*****-Weg:

Code:

Option Explicit

Dim WSHShell, oFSO, oFolder, oFiles, oFile, strOldPath, strNewPath, lnkName, myShortcut
Dim strTarget, strWorkD, strWDRep, strRep, crLnk, strFolder, subFiles
 
Set WSHShell = WS*****.CreateObject("WS*****.Shell")
Set oFSO = WS*****.CreateObject("S*****ing.FileSystemObject")

strFolder = InputBox("Bitte den Pfad zu den Verknüpfungen eingeben." & vbCrLf & "z.B. C:\Users\Admin\Desktop\spiele")
strOldPath = InputBox("Bitte den alten Pfad angeben, indem die Spiele vorher installiert waren." & vbCrLf & "z.B. C:\Games")
strNewPath = InputBox("Bitte den neuen Pfad angeben, indem die Spiele jetzt installiert sind." & vbCrLf & "z.B. E:\Games")

If strFolder = "" Then
        MsgBox "Keine Eingabe. Beende!", vbOKOnly, "Error"
        Ws*****.Quit
End If
If strOldPath = "" Then
        MsgBox "Keine Eingabe. Beende!", vbOKOnly, "Error"
        Ws*****.Quit
End If
If strNewPath = "" Then
        MsgBox "Keine Eingabe. Beende!", vbOKOnly, "Error"
        Ws*****.Quit
End If


If oFSO.FolderExists(strFolder) Then
        For Each oFolder In oFSO.GetFolder(strFolder).SubFolders                                     
                For Each oFile In oFolder.Files
                            If UCASE(Right(oFile.Path,4)) = ".LNK" then                   
                        'Managing old LNK-Files
                                lnkName = oFolder & "\" & oFile.Name
                                Set myShortcut = WSHShell.CreateShortcut(oFile.Path)
                                strTarget = myShortcut.targetpath
                                strWorkD = myShortcut.WorkingDirectory
                                strWDRep = Replace(strWorkD, strOldPath, strNewPath)
                                strRep = Replace(strtarget, strOldPath, strNewpath)
                                oFSO.DeleteFile lnkName
                        'Creating new LNK-File
                                Set crLnk = WSHShell.CreateShortcut(lnkName)
                                crLnk.TargetPath = strRep
                                crLnk.WorkingDirectory = strWDRep
                                crLnk.save
                        End If
                Next
        Next
Else
        MsgBox "Der Pfad """ & strFolder & """ existiert nicht." & vbcrlf & "Bitte überprüfen Sie die Pfadangabe zu den Verknüpfungen", vbOKOnly, "Error"
End If

VG,
haze303

sTarBuZz 30.11.09 16:28

deine methode is auch nich schlecht, aber ich würd lieber n GUI haben :)
ich schreib ma den antivir-support an, ob die da was machen können.

EDIT: ich hab grad rausgefunden, dass Antivir nicht mehr meckert,wenn ich das icon nicht mit in die exe packe. Ansonsten brauch ich nix zu ändern.

DaTaNeT 11.12.09 01:50

So ein Tool ist immer nützlich. Würde mich freuen, wenn du (sTarBuZz) mir auch nen Link zu dem Tool mit GUI schicken könntest ;)
Achso noch als Tipp für Windows-User, es gibt auch noch die Möglichkeit sogenannte "[Link nur für registrierte und freigeschaltete Mitglieder sichtbar. Jetzt registrieren...]" zu setzen. Könnte sehr nützlich sein, falls es sich nicht um Verknüpfungen handelt, sondern ein Dateisystem z.B. einem installierten Spiel auf einer externen Platte. Oder man einfach große Datenmengen verlagern möchte und Programme nach wie vor darauf zugreifen können sollen.

sTarBuZz 11.12.09 09:58

@DaTaNeT:

Ich hab dir den Link per PN geschickt.
Das mit den Abzweigungspunkten schu ich mir mal an, aber ich kann für nix garantieren.

mfG sTarBuZz

DaTaNeT 11.12.09 14:05

Thx für den Link ;)
Das mit dem Abzweigungspunkt sollte auch nur ein Hinweis sein ;) Wie man das genau macht steht ja im Wiki bzw. auf der dort verweisenden Seite.

Achja und es wäre echt super, wenn du die EXE soweit ändern könntest (oder einfach ne andere Kompression wählen, wenn es wirklich nur daran liegen sollte). Ich bin in diesem Punkt vorsichtig geworden und werde das Tool daher erstmal nicht testen... :(
Trotzdem danke!

sTarBuZz 12.12.09 22:59

dann nimm den vbs-code von haze303 bis ich die exe geändert habe (morgen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:54 Uhr.

Powered by vBulletin® (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.