Verknüpfung auf ungültiges Ziel erstellen
Pfade von Verknüpfungen sollen "bewusst" auf einen falschen/ungültigen Pfad abgeändert werden, dies verhindert Windows aber.
In Unserem Netzwerk stellen wir den Usern angepasste Desktop- und Startmenüverknüpfungen zur Verfügung. Die Verknüpfungen werden aus gegebenem Anlass quasi aus einem Share in das jeweilige Profil kopiert.
Wie kann ich die Vorlagen in dem Share bearbeiten, ohne die Verknüpfungen auf dem jeweiligen Bearbeitungs-PC gültig machen zu müssen???
Das Problem ist ja, wenn ich eine Verknüpfung über die Eigenschaften öffne und bearbeite, wird überprüft, ob der Pfad stimmt und das verknüpfte File auch wirklich dort liegt. Ist dies nicht der Fall, wird das Speichern/Schließen der Verknüpfungseigenschaften verhindert.
Da aber nicht jedes Programm auf jedem Client installiert ist, kann ich einige Verknüpfungen nicht bearbeiten - Hinweis auf einen "ungültigen Pfad".
Kann man die Überprüfung der Pfadgültigkeit abschalten?
Oder gibts ein einfaches Tool, um die Verknüpfungsinhalte bewusst auf ungültige Pfade anzupassen?
In Unserem Netzwerk stellen wir den Usern angepasste Desktop- und Startmenüverknüpfungen zur Verfügung. Die Verknüpfungen werden aus gegebenem Anlass quasi aus einem Share in das jeweilige Profil kopiert.
Wie kann ich die Vorlagen in dem Share bearbeiten, ohne die Verknüpfungen auf dem jeweiligen Bearbeitungs-PC gültig machen zu müssen???
Das Problem ist ja, wenn ich eine Verknüpfung über die Eigenschaften öffne und bearbeite, wird überprüft, ob der Pfad stimmt und das verknüpfte File auch wirklich dort liegt. Ist dies nicht der Fall, wird das Speichern/Schließen der Verknüpfungseigenschaften verhindert.
Da aber nicht jedes Programm auf jedem Client installiert ist, kann ich einige Verknüpfungen nicht bearbeiten - Hinweis auf einen "ungültigen Pfad".
Kann man die Überprüfung der Pfadgültigkeit abschalten?
Oder gibts ein einfaches Tool, um die Verknüpfungsinhalte bewusst auf ungültige Pfade anzupassen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 168300
Url: https://administrator.de/contentid/168300
Ausgedruckt am: 05.11.2024 um 17:11 Uhr
16 Kommentare
Neuester Kommentar
Hallo Bodenseehost,
ja, es gibt ein "Tool": VBScript
Das Script z.B. als ChgLNK.vbs speichern und dann so aufrufen:
Weitere Eigenschaften einer Verknüpfung:
<code type"plain">
objShortcut.WindowStyle
objShortcut.Hotkey
objShortcut.IconLocation
objShortcut.Description
objShortcut.WorkingDirectory
Gruß
Friemler
ja, es gibt ein "Tool": VBScript
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShortcut = objShell.CreateShortcut(WScript.Arguments(0))
objShortcut.TargetPath = WScript.Arguments(1)
objShortcut.Save
Das Script z.B. als ChgLNK.vbs speichern und dann so aufrufen:
cscript /nologo ChgLNK.vbs "Verknüpfung.lnk" "NeuesZiel"
Weitere Eigenschaften einer Verknüpfung:
<code type"plain">
objShortcut.WindowStyle
objShortcut.Hotkey
objShortcut.IconLocation
objShortcut.Description
objShortcut.WorkingDirectory
Gruß
Friemler
Im Explorer die Pfadüberprüfung abschalten wird sich wohl nicht machen lassen.
Grüße
Eine GUI-Lösung:
Das Icon der Verknüpfung auf das Icon des VBScripts ziehen.
Gruß
Friemler
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
strTarget = InputBox("Neues Ziel der Verknüpfung:")
If strTarget <> "" Then
Set objShortcut = objShell.CreateShortcut(WScript.Arguments(0))
objShortcut.TargetPath = strTarget
objShortcut.WorkingDirectory = objFSO.GetParentFolderName(strTarget)
objShortcut.Save
End If
Das Icon der Verknüpfung auf das Icon des VBScripts ziehen.
Gruß
Friemler
Gesundes neues Jahr allen!
Hallo Friemler,
wie soll der Script sein, wenn zur einen bestehenden Verknüpfung ein Kommentar hinzugefügt werden soll (da die restlichen bestehenden Eigenschaften nicht überschrieben werden dürfen)?
Mein Versuch war wie folgt:
Dieser Code-Aufbau funktioniert nur dann, wenn zusätzlich eine Befehlszeile mit dem Pfad zu der exe-Datei mit angegeben wird. Dannn wird aber eine vollständig neue Verknüpfung angelegt. In meinem Fall ist dies nicht erwünscht, da das Ziel (die Eigenschaft: Pfad zur exe-Datei) bei der Installation der Anwendung variiert werden kann – je nach Version. Somit möchte ich erreichen, dass die Kommentar-Eigenschaft der Verknüpfung bei Bedarf benutzerdefiniert gesetzt wird, aber ihre restlichen Eigenschaften unverändert bleiben.
Danke.
Hallo Friemler,
wie soll der Script sein, wenn zur einen bestehenden Verknüpfung ein Kommentar hinzugefügt werden soll (da die restlichen bestehenden Eigenschaften nicht überschrieben werden dürfen)?
Mein Versuch war wie folgt:
Set objShell=WScript.CreateObject("Wscript.Shell")
Set objShortcut=objShell.CreateShortcut("%ProgramData%\Microsoft\Windows\Start Menu\Programs\%NewLinkName%")
objShortcut.Description="%Beschreibung(Kommentar)%"
objShortcut.Save
Danke.
Hallo evinben,
ich habe gerade bei mir einen kleinen Test durchgeführt. Mit folgendem Code konnte ich nur den Kommentar einer Verknüpfung neu setzen:
Den Code z.B. als
Beim Pfad zur Verknüpfung muss die Dateierweiterung
Die Methode
Um VBS zu lernen: Google mal nach
Gruß
Friemler
ich habe gerade bei mir einen kleinen Test durchgeführt. Mit folgendem Code konnte ich nur den Kommentar einer Verknüpfung neu setzen:
If WScript.Arguments.Count = 2 Then
Set objShell = CreateObject("WScript.Shell")
Set objShortcut = objShell.CreateShortcut(WScript.Arguments(0))
objShortcut.Description = WScript.Arguments(1)
objShortcut.Save
End If
Den Code z.B. als
ChngComment.vbs
speichern und dann folgendermaßen aufrufen:cscript /nologo ChngComment.vbs "PfadZurVerknüpfung.lnk" "Neuer Kommentar"
Beim Pfad zur Verknüpfung muss die Dateierweiterung
.lnk
mit angegeben werden.Die Methode
CreateShortcut
erzeugt keine neuen Verknüpfungen (der Name ist missverständlich). Die Methode erzeugt ein Objekt, über das auf die Eigenschaften einer Verknüpfung (auch lesend) zugegriffen werden kann. Geänderte/neue Eigenschaften müssen mit der Methode Save
gespeichert werden (Zeile 5). Wenn die Verknüpfungsdatei noch garnicht existiert, wird sie erst dann erstellt.Um VBS zu lernen: Google mal nach
script56.chm
(englische Version von MS) oder lade Dir von hier die (teilweise) deutsche Version.Gruß
Friemler
Hallo Friemler,
es klappt!
Ich freue mich, dass ich nicht aus diesem Grund darauf hingewiesen wurde, dass „diese Methode eben wie schon ihr Name sagt die Aufgabe hat eine vollständig neue Verknüpfung zu erzeugen und nichts anders“.
Etwas Hoffnung ist daher im Leben wichtig und es funktioniert.
Danke sehr für den Tipp mit dem VB-Lehrstoff "script56.chm".Dies werde ich mir ernst nehmen. Von meinem dicken VB-Buch im Regal scheue ich mich noch.
Gruß
evinben
es klappt!
Die Methode CreateShortcut erzeugt keine neuen Verknüpfungen (der Name ist missverständlich).
Wieder einiges dazu gelernt.Ich freue mich, dass ich nicht aus diesem Grund darauf hingewiesen wurde, dass „diese Methode eben wie schon ihr Name sagt die Aufgabe hat eine vollständig neue Verknüpfung zu erzeugen und nichts anders“.
Etwas Hoffnung ist daher im Leben wichtig und es funktioniert.
Danke sehr für den Tipp mit dem VB-Lehrstoff "script56.chm".Dies werde ich mir ernst nehmen. Von meinem dicken VB-Buch im Regal scheue ich mich noch.
Gruß
evinben
Hallo Friemler,
kannst du mir bitte weiter Helfen?. Ich versuche ein VBScripts zu erstellen, mit dem ich eine Verknüfung eines Ordner erstellen kann. Schön wäre, wenn ich das Icon des Scipts auf den Ordner ziehe und die Verknüfung wird an den vorgegebenen Ort erstellt. Zudem soll die Eingabe des Namen der Verknüfungen mölich sein.
Gruß
kannst du mir bitte weiter Helfen?. Ich versuche ein VBScripts zu erstellen, mit dem ich eine Verknüfung eines Ordner erstellen kann. Schön wäre, wenn ich das Icon des Scipts auf den Ordner ziehe und die Verknüfung wird an den vorgegebenen Ort erstellt. Zudem soll die Eingabe des Namen der Verknüfungen mölich sein.
Gruß
Hallo Knuefi
willkommen in diesem Beitrag.
Gestern war ich spät Abend zu müde, um dir gleich mit einer Lösung zu antworten und jetzt habe ich die Gelegenheit gefunden für dich etwas aus den obigen Schnipseln von Friemler was zusammenzustellen.
Bei mir funktioniert es problemlos und wenn's was gibt, melde dich gerne und hoffe dein Anliegen soweit korrekt verstanden zu haben.
Gruß
Nik
willkommen in diesem Beitrag.
Gestern war ich spät Abend zu müde, um dir gleich mit einer Lösung zu antworten und jetzt habe ich die Gelegenheit gefunden für dich etwas aus den obigen Schnipseln von Friemler was zusammenzustellen.
Bei mir funktioniert es problemlos und wenn's was gibt, melde dich gerne und hoffe dein Anliegen soweit korrekt verstanden zu haben.
Schön wäre, wenn ich das Icon des Scipts auf den Ordner ziehe und die Verknüfung wird an den vorgegebenen Ort erstellt.
Du sollst allerdings andersrum vorgehen (den Ordner auf das Skript ziehen)Gruß
Nik
'Wenn das Skript ohne Argument ausgeführt wird, abbrechen
If WScript.Arguments.Count < 1 Then WScript.Quit
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objShell = CreateObject("WScript.Shell")
'Ziehl der Verknüpfung abfragen
strTarget = InputBox("Neues Ziel der Verknüpfung:")
If strTarget <> "" Then
Set objShortcut = objShell.CreateShortcut(WScript.Arguments(0) & ".lnk")
'Kommentar/Beschreibung setzen
'objShortcut.Description = WScript.Arguments(1)
'Ziehl der Verknüpfung setzen
objShortcut.TargetPath = strTarget
'Abreitsverzeichnis setzen
objShortcut.WorkingDirectory = objFSO.GetParentFolderName(strTarget)
objShortcut.Save
End If
Hallo Knuefi, hallo Nik,
ich hatte auch noch was anderes zu tun, deshalb erst jetzt mein Vorschlag. Wie meistens etwas länger als der Code der "Konkurenz" , aber ausführlich kommentiert und komplett ausprogrammiert mit Fehlerhandling usw.:
In Zeile 11 muss der Pfad zu dem Verzeichnis angegeben werden, in dem die erzeugten Verknüpfungen abgelegt werden sollen.
Das Icon des Scripts auf das Icon des Verzeichnisses ziehen, zu dem die Verknüpfung erstellt werden soll, funktioniert natürlich nicht, dadurch würde das Script in das Verzeichnis kopiert. Es geht nur umgekehrt.
Gruß
Friemler
ich hatte auch noch was anderes zu tun, deshalb erst jetzt mein Vorschlag. Wie meistens etwas länger als der Code der "Konkurenz" , aber ausführlich kommentiert und komplett ausprogrammiert mit Fehlerhandling usw.:
'Alle Variablen müssen vor ihrer Verwendung deklariert werden
Option Explicit
'Konstanten zur Konfiguration der Verknüpfung
Const cWindowStyleShowNormal = 1
Const cWindowStyleShowMaximized = 3
Const cWindowStyleShowMinimized = 7
'Speicherpfad für die Verknüpfungsdateien
Const cLinkStorageLocation = "C:\Users\<User>\Desktop"
'Variablendeklaration
Dim colArgs, objFSO, objShell, objShortcut
Dim strFolderPath, strLinkName
Dim strScriptDescription
Dim strMsgPromptForName
Dim strErrMsgNoArgs, strErrMsgDirNotExists, strErrMsgLinkNameInvalid
'Meldungs-Strings initialisieren
strScriptDescription = "Verknüpfung erzeugen"
strMsgPromptForName = "Geben Sie einen Namen für die Verknüpfung an."
strErrMsgNoArgs = "Bitte übergeben Sie das Ziel der Verknüpfung" & vbCrLf & _
"beim Aufruf dieses Scripts als Argument!"
strErrMsgDirNotExists = "Das übergebene Verzeichnis existiert nicht!"
strErrMsgLinkNameInvalid = "Der eingegebene Name enthält ungültige Zeichen." & vbCrLf & _
"Die Zeichen \/:*?""<>| dürfen nicht Bestandteil" & vbCrLf & _
"des Namens sein."
'Argument-Collection holen
Set colArgs = WScript.Arguments
'und prüfen, ob mindestens ein Argument übergeben wurde
If colArgs.Count = 0 Then
ShowError strErrMsgNoArgs
WScript.Quit
End If
'Filesystem-Objekt erzeugen und den absoluten Pfad
'des übergebenen Verzeichnisses ermitteln
Set objFSO = CreateObject("Scripting.FileSystemObject")
strFolderPath = objFSO.GetAbsolutePathName(colArgs(0))
'Prüfen, ob das übergebene Verzeichnis existiert
If Not objFSO.FolderExists(strFolderPath) Then
ShowError strErrMsgDirNotExists
WScript.Quit
End If
'Name der Verknüpfung vom User einlesen
'Als Default-Wert wird der Name des Verzeichnisses eingetragen
strLinkName = InputBox(strMsgPromptForName, _
strScriptDescription, _
objFSO.GetFileName(strFolderPath) _
)
'Prüfen, ob eine Eingabe gemacht wurde
'Wenn nicht, Abbruch
If strLinkName = "" Then
WScript.Quit
End If
'Prüfen, ob der Name ungültige Zeichen enthält
If ContainsIllegalChars(strLinkName) Then
ShowError strErrMsgLinkNameInvalid
WScript.Quit
End If
'Jetzt können die Daten der Verknüpfung festgelegt werden
Set objShell = WScript.CreateObject("WScript.Shell")
Set objShortcut = objShell.CreateShortcut(objFSO.BuildPath(cLinkStorageLocation, strLinkName & ".lnk"))
objShortcut.TargetPath = strFolderPath
objShortcut.WindowStyle = cWindowStyleShowNormal
'Jetzt die Verknüpfungsdatei speichern
objShortcut.Save
'Prüft, ob ein übergebener String bestimmte Zeichen enthält
Function ContainsIllegalChars(ByRef strAString)
Dim objRegEx
Set objRegEx = New RegExp
objRegEx.IgnoreCase = True
objRegEx.Global = True
objRegEx.Pattern = "[\\/:\*\?""<>\|]"
ContainsIllegalChars = objRegEx.Test(strAString)
End Function
'Zeigt Dialogboxen mit Fehlermeldungen an
Sub ShowError(ByRef strMessage)
MsgBox strMessage, _
vbCritical + vbOKOnly, _
strScriptDescription
End Sub
In Zeile 11 muss der Pfad zu dem Verzeichnis angegeben werden, in dem die erzeugten Verknüpfungen abgelegt werden sollen.
Das Icon des Scripts auf das Icon des Verzeichnisses ziehen, zu dem die Verknüpfung erstellt werden soll, funktioniert natürlich nicht, dadurch würde das Script in das Verzeichnis kopiert. Es geht nur umgekehrt.
Gruß
Friemler
hey Friemler, extrem ordentlich .
ist es bei dir immer so überall zu Hause perfekt?
Den Code habe mir gleich archiviert (zu meiner Verknüpfungs-Sammlung eingefügt).
Wenn du schon sowieso dabei bist, vielleicht könntest du ihn leicht so erweitern, dass ebenso eine Fehlermeldung kommt (und zwar schon vor Eingabe des Ordner-Namens), falls der Pfad nicht stimmt (Speicherpfad für die Verknüpfungsdateien / Const cLinkStorageLocation) und eventuell ein Schalter (Option) für die Beschreibung/"Kommentar", dann haben alle zukünftige Leser gleich in Fülle servierte Lösung .
Einen schönen Abend
Nik
ist es bei dir immer so überall zu Hause perfekt?
Den Code habe mir gleich archiviert (zu meiner Verknüpfungs-Sammlung eingefügt).
Wenn du schon sowieso dabei bist, vielleicht könntest du ihn leicht so erweitern, dass ebenso eine Fehlermeldung kommt (und zwar schon vor Eingabe des Ordner-Namens), falls der Pfad nicht stimmt (Speicherpfad für die Verknüpfungsdateien / Const cLinkStorageLocation) und eventuell ein Schalter (Option) für die Beschreibung/"Kommentar", dann haben alle zukünftige Leser gleich in Fülle servierte Lösung .
Einen schönen Abend
Nik
Hi Nik,
nur wenn man hohe Ansprüche hat (auch an sich selbst), kommt man dem Idealfall näher. Und nein, das wenigste von dem was ich mache, ist auch nur annähernd perfekt, bin ja auch nur ein Mensch.
Ich habe nur auf solche Aussagen wie "Geht auch mit diesen 5 Zeilen" oder "Ich nehme die Lösung von XY, weil sie kürzer ist" angespielt.
Bzgl. Deiner Erweiterungswünsche: Erst mal abwarten, was Knuefi dazu meint, das Script ist ja für ihn.
Und außerdem: Die besten Möglichkeiten, sich selbst zu verbessern (besonders beim programmieren), bieten sich einem, wenn man das verbessert, was andere gemacht haben...
Grüße
Friemler
nur wenn man hohe Ansprüche hat (auch an sich selbst), kommt man dem Idealfall näher. Und nein, das wenigste von dem was ich mache, ist auch nur annähernd perfekt, bin ja auch nur ein Mensch.
Ich habe nur auf solche Aussagen wie "Geht auch mit diesen 5 Zeilen" oder "Ich nehme die Lösung von XY, weil sie kürzer ist" angespielt.
Bzgl. Deiner Erweiterungswünsche: Erst mal abwarten, was Knuefi dazu meint, das Script ist ja für ihn.
Und außerdem: Die besten Möglichkeiten, sich selbst zu verbessern (besonders beim programmieren), bieten sich einem, wenn man das verbessert, was andere gemacht haben...
Grüße
Friemler