myGully.com Boerse.SH - BOERSE.AM - BOERSE.IO - BOERSE.IM Boerse.BZ .TO Nachfolger
Zurück   myGully.com > Computer & Technik > Programmierung
Seite neu laden

VBS S***** zum Ändern von Verknüpfungen

Willkommen

myGully

Links

Forum

 
Antwort
Themen-Optionen Ansicht
Ungelesen 26.11.09, 03:35   #1
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard VBS S***** 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
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 26.11.09, 20:00   #2
haze303
xor eax, eax
 
Benutzerbild von haze303
 
Registriert seit: Sep 2009
Beiträge: 593
Bedankt: 466
haze303 ist noch neu hier! | 1 Respekt Punkte
Standard

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.
haze303 ist offline   Mit Zitat antworten
Ungelesen 27.11.09, 07:13   #3
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

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?
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 27.11.09, 10:58   #4
haze303
xor eax, eax
 
Benutzerbild von haze303
 
Registriert seit: Sep 2009
Beiträge: 593
Bedankt: 466
haze303 ist noch neu hier! | 1 Respekt Punkte
Standard

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
haze303 ist offline   Mit Zitat antworten
Ungelesen 27.11.09, 21:38   #5
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

wenn ich das s***** jetzt in den ordner kopiere und ausführe passiert leider rein garnichts
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 27.11.09, 21:45   #6
haze303
xor eax, eax
 
Benutzerbild von haze303
 
Registriert seit: Sep 2009
Beiträge: 593
Bedankt: 466
haze303 ist noch neu hier! | 1 Respekt Punkte
Standard

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?
haze303 ist offline   Mit Zitat antworten
Ungelesen 27.11.09, 21:50   #7
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

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

mfG sTarBuZz
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 27.11.09, 22:05   #8
haze303
xor eax, eax
 
Benutzerbild von haze303
 
Registriert seit: Sep 2009
Beiträge: 593
Bedankt: 466
haze303 ist noch neu hier! | 1 Respekt Punkte
Standard

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.
haze303 ist offline   Mit Zitat antworten
Ungelesen 28.11.09, 10:20   #9
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

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
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 29.11.09, 16:56   #10
haze303
xor eax, eax
 
Benutzerbild von haze303
 
Registriert seit: Sep 2009
Beiträge: 593
Bedankt: 466
haze303 ist noch neu hier! | 1 Respekt Punkte
Standard

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
haze303 ist offline   Mit Zitat antworten
Ungelesen 30.11.09, 16:28   #11
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

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.
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 11.12.09, 01:50   #12
DaTaNeT
Anfänger
 
Registriert seit: Dec 2009
Beiträge: 14
Bedankt: 26
DaTaNeT gewöhnt sich langsam dran | 95 Respekt Punkte
Standard

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 Mitglieder sichtbar. Bitte einloggen oder neu 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.
DaTaNeT ist offline   Mit Zitat antworten
Ungelesen 11.12.09, 09:58   #13
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

@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
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Ungelesen 11.12.09, 14:05   #14
DaTaNeT
Anfänger
 
Registriert seit: Dec 2009
Beiträge: 14
Bedankt: 26
DaTaNeT gewöhnt sich langsam dran | 95 Respekt Punkte
Standard

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!
DaTaNeT ist offline   Mit Zitat antworten
Ungelesen 12.12.09, 22:59   #15
sTarBuZz
~Shisha-Chiller~
 
Benutzerbild von sTarBuZz
 
Registriert seit: Jul 2009
Ort: C:\Windows\System32\explorer.exe
Beiträge: 119
Bedankt: 107
sTarBuZz ist noch neu hier! | 0 Respekt Punkte
Standard

dann nimm den vbs-code von haze303 bis ich die exe geändert habe (morgen)
__________________
"Oh, ein sprechender Elch will meine Kreditkartennummer... das find ich ein faires Angebot!"
sTarBuZz ist offline   Mit Zitat antworten
Antwort


Forumregeln
Du kannst keine neue Themen eröffnen
Du kannst keine Antworten verfassen
Du kannst keine Anhänge posten
Du kannst nicht deine Beiträge editieren

BB code is An
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:00 Uhr.


Sitemap

().