Verknüpfungen Pfad ändern (vbs, script, batch)

littleNicon

Cadet 1st Year
Registriert
Juli 2018
Beiträge
10
Hallo @ all

Ich werde nicht schlau aus einem vbs script...

Das Ziel wäre eine Verknüpfung den Ziel (Pfad) zu verändern. Hab auch schon nach bestimmten Lösungen gesucht.
Fündig werde ich nur wie ich mit vbs eine Verknüpfung erstelle oder diese auslesen kann.
Nur wenige und alte Beiträge gehen auf das Thema ein.
Ich möchte auch nur ein bestimmter abschnitt ändern z.b.
C:\Program File\alter Order\Test-tool.exe
C:\Program File\neuer Ordner\Test-tool.exe

Bei dem gefundenen script sollte der alte Pfad genau übereinstimmen...
sonst ändert er die Verknüpfung nicht. Und wie ich eine Variable einbaue, versteh ich nicht.


On Error Resume Next
set WshShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
set objArgs = WScript.Arguments
set fld = fso.GetFolder(objArgs(0))
set fc = fld.Files
For Each f1 in fc
If UCase(Right(f1.name, 3)) = "LNK" Then
Set sl = WshShell.CreateShortcut(f1.Path)
z = sl.TargetPath
z = Replace(z, "D:\Alter\Pfad", "D:\Neuer\Pfad")
sl.TargetPath = z
y = sl.WorkingDirectory
y = Replace(z, "D:\Alter\Pfad", "D:\Neuer\Pfad")
sl.WorkingDirectory = y
sl.Save
End If
Next
WScript.Echo "Änderungen ausgeführt!"

Info:
------------------------------------------------------
Kopiere den Text zwischen den Linien in die Zwischenablage
und füge ihn in ein leeres Editor(Notepad)-Fenster ein.
Speichere die Datei als "ChangeShortcut.vbs" in Deinem
Ordner "SendTo", den findest Du unter
C:\Users\DeinName\AppData\Roaming\Microsoft\Window s\SendTo.
Danach klicke im Windows Explorer mit der rechten Maustaste
auf den Ordner, der die Verknüpfungen enthält und wähle im
Kontextmenü "Senden an", wähle "ChangeShortcuts.vbs". In dem
Script musst Du die Bezeichnungen für den alten und neuen
Pfad vorher so ändern, dass dort die tatsächlichen Angaben
stehen. Nun wird jede Verknüpfung, in der als Ziel
"D:\Alter\Pfad" vorhanden ist, in "D:\Neuer\Pfad" geändert.
Falls der Pfad auch unter "Ausführen in" eingetragen ist,
wird er dort ebenfalls geändert. Verknüpfungen, in denen
"D:\Alter\Pfad" nicht vorkommt, werden nicht verändert.
Etwaige Argumente bleiben unverändert.

Wenn die Änderungen fertig sind, gibt es eine Meldung,
während der Ausführung wird *nichts* angezeigt.



Ich bedanke mich jetzt schon fürs lesen und antworten.
Gurss littleNicon
 
@ littleNicon
mit vbs kenne ich mich nicht aus.

Hab da mal auf die Schnelle etwas mit AutoIt zusammengebastelt. Den Quellcode kompilieren und die entsprechende .lnk Verknüfung auf die fertige .exe ziehen.

Danach erscheint eine Übersicht der übergebenen .lnk Verknüpfung (siehe)

Im nächsten Schritt wird der Pfad angezeigt. Diesen dann entsprechend anpassen.

Weiter wird dann das Arbeitsverzeichnis ausgelesen und muß ggf. angepasst werden.

Die vorhandene, übergebene .lnk wird gelöscht und eine neue, angepasste dort erstellt.

Code:
#include <MsgBoxConstants.au3>
#include <file.au3>

Example()

Func Example()
    ; $CmdLine[1] ist wie die Batch Paramterübergabe %1
    $sFilePath = $CmdLine[1]

;Namen der übergebenen Verknüpfung auslesen; sowie Laufwerksbuchstabe und Pfad der Verknüpfung
Dim $Path = $CmdLine[1]
Dim $szDrive, $szDir, $szFName, $szExt
_PathSplit($Path, $szDrive, $szDir, $szFName, $szExt)

        ; Retrieve details about the shortcut.
    $aDetails = FileGetShortcut($sFilePath)
    If Not @error Then
        MsgBox($MB_SYSTEMMODAL, "", "Pfad: " & $aDetails[0] & @CRLF & _
                "Arbeitsverzeichnis " & $aDetails[1] & @CRLF & _
                "Argumente: " & $aDetails[2] & @CRLF & _
                "Beschreibung: " & $aDetails[3] & @CRLF & _
                "Dateiname des Icons: " & $aDetails[4] & @CRLF & _
                "Index des Icons: " & $aDetails[5] & @CRLF & _
                "Verknüpfungsstatus: " & $aDetails[6] & @CRLF)
    EndIf

;Eingabefeld für neuen Pfad der EXE
$sNeuerPfadExe = InputBox("", "Neuer Pfad ", $aDetails[0], "")

;Eingabefeld für neues WorkingDir
$sNeuerPfadWorkingDir = InputBox("", "Neues Arbeitsverzeichnis ", $aDetails[1], "")

;alte Verknüpfung löschen
FileDelete($CmdLine[1])

;Neue Verknüpfung erstellen
FileCreateShortcut($sNeuerPfadExe, $szDrive & $szDir & $szFName & ".lnk", $sNeuerPfadWorkingDir)

EndFunc
 
Zuletzt bearbeitet:
Danke vielmals @ ryan_blackdrago für das AutoIT Script :-)
Es funktionier super und ich versteh wenigstens die Befehle die hier stehen.
Nicht so wie beim vbs script...

Besten Dank für alles.
 
Zurück
Oben