Verknüpfungen per Skript erzeugen

Ich bin auf der Suche nach einem Kommandozeilen-Programm, das ich aus einer Batch-Datei oder einem Windows-Skript heraus aufrufen kann und das Verknüpfungen erzeugt, wie Windows sie im Startmenü oder auf dem Desktop ablegt.

In Pocket speichern vorlesen Druckansicht
Lesezeit: 2 Min.
Von
  • Hajo Schulz

Ich bin auf der Suche nach einem Kommandozeilen-Programm, das ich aus einer Batch-Datei oder einem Windows-Skript heraus aufrufen kann und das Verknüpfungen erzeugt, wie Windows sie im Startmenü oder auf dem Desktop ablegt.

Ein Windows-eigenes Tool oder ein Programm von dritter Seite zum Einsatz in einer Batch-Datei ist mir leider nicht bekannt. Aber der Windows Script Host bietet eine derartige Funktion schon von sich aus. Das nebenstehende Skript deskicon.vbs kann als Grundgerüst für Ihre Entwicklung dienen: Es erzeugt auf dem Desktop eine Verknüpfung zu einer beliebigen Datei, deren Namen man ihm als Befehlszeilen-Argument übergibt.

Die wichtigsten Aufrufe stecken in den Zeilen 19 und 22: Erstere erzeugt ein WshShortcut-Objekt mit einem Namen, den das Skript zuvor aus dem ihm übergebenen Argument, dem Desktop-Ordner des aktuellen Benutzers und der obligatorischen Endung .lnk erzeugt hat. Zeile 22 speichert dieses Objekt im Dateisystem und macht die Verknüpfung so für den Anwender sichtbar. Dazwischen definiert eine Zuweisung an TargetPath, auf welche Datei sich die Verknüpfung beziehen soll. Der Artikel über das WshShortcut-Objekt innerhalb der Windows-Script-Host-Dokumentation (siehe Soft-Link) verrät, welche weiteren Attribute man wahlweise vor dem Speichern noch mit Inhalt füllen könnte.

http://ct.de/0510184

Das Erzeugen einer Verknüpfung per Skript ist - abgesehen vom nötigen Drumherum - ein Dreizeiler.

1 Set wshShell = CreateObject("WScript.Shell")
2 Set fso = CreateObject("Scripting.FileSystemObject")
3 Set args = WScript.Arguments
4
5 If args.Count < 1 Then
6 WScript.Echo "Dateiname fehlt."
7 WScript.Quit
8 End If
9
10 ziel = args(0)
11 ziel = fso.GetAbsolutePathName(ziel)
12 idxName = InStrRev(ziel, "\")
13 idxExt = InStrRev(ziel, ".")
14 If idxExt < idxName Then idxExt = Len(ziel) + 1
15 ordner = Left(ziel, idxName - 1)
16 linkName = Mid(ziel, idxName + 1, idxExt - idxName - 1)
17 desktop = wshShell.SpecialFolders("Desktop")
18
19 Set link = wshShell.CreateShortcut(desktop & "\" & linkName & ".lnk")
20 link.TargetPath = ziel
21 link.WorkingDirectory = ordner
22 link.Save (hos)