Mehrere Shortcuts, einen Sammel-Ordner und neue .ico auf dem Desktop anlegen
Moin zusammen,
ich habe hier im Forum schon sehr viele Codeschnipsel gefunden, doch irgendwie bekomme ich es einfach nicht hin die richtigen Teile zusammen zu fügen. Ich würde mich riesig freuen, wenn es jemanden gibt, der mir bei meinem Anliegen halfen kann. Ich versuche es mal alles zu dokumentieren, was ich mir vorstelle.
Also ich möchte gern per Skript:
Einen neuen Ordner erstellen "Ordnername" Ordnername würde ich gern selbst festlegen.
Der Ort des Ordners soll immer auf dem Desktop des jeweilig angemeldeten Benutzers liegen
Der Ordner soll zudem eine neues Icon bekommen, die Icon Datei liegt heute auf einem Externen Sharepointpfad - damit die Icon immer angezeigt werden sollten die .ico-Datei an einem definierten Ort (Lokal zum Benutzer kopiert werden wie z.B,"C:/Daten/EDV" - "EDV" gibt es noch nicht).
In dem Ordner sollen dann Verknüpfungen von unterschiedlichen Exceldateien, Worddateien, Powerpointdateien erstellt werden die auch bestimmte Namen und neue Icon bekommen.
Den Part mit den Icons und den Verknüpfungen habe ich schon hinbekommen, aber die Ordner Situation bekomme ich nicht eingebaut. Des Weiteren soll der Code so aufgebaut sein, dass ich jederzeit neue Verknüpfungen hinzufügen kann.
Ich würde mich soooo sehr freuen, wenn Ihr mir helfen könntet.
P.s. das ist mein erster Post
.
Edit: es ist natürlich eine Frage und vielleicht mal eine Anleitung. Bitte sonst gern verschieben
Danke und viele Grüße
Seger
ich habe hier im Forum schon sehr viele Codeschnipsel gefunden, doch irgendwie bekomme ich es einfach nicht hin die richtigen Teile zusammen zu fügen. Ich würde mich riesig freuen, wenn es jemanden gibt, der mir bei meinem Anliegen halfen kann. Ich versuche es mal alles zu dokumentieren, was ich mir vorstelle.
Also ich möchte gern per Skript:
Einen neuen Ordner erstellen "Ordnername" Ordnername würde ich gern selbst festlegen.
Der Ort des Ordners soll immer auf dem Desktop des jeweilig angemeldeten Benutzers liegen
Der Ordner soll zudem eine neues Icon bekommen, die Icon Datei liegt heute auf einem Externen Sharepointpfad - damit die Icon immer angezeigt werden sollten die .ico-Datei an einem definierten Ort (Lokal zum Benutzer kopiert werden wie z.B,"C:/Daten/EDV" - "EDV" gibt es noch nicht).
In dem Ordner sollen dann Verknüpfungen von unterschiedlichen Exceldateien, Worddateien, Powerpointdateien erstellt werden die auch bestimmte Namen und neue Icon bekommen.
Den Part mit den Icons und den Verknüpfungen habe ich schon hinbekommen, aber die Ordner Situation bekomme ich nicht eingebaut. Des Weiteren soll der Code so aufgebaut sein, dass ich jederzeit neue Verknüpfungen hinzufügen kann.
dim objFSO
set objFSO = CreateObject("Scripting.FileSystemObject")
quelle ="\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\Neuesicon.ico"
ziel = "C:\Daten\Absatz.ico"
objFSO.copyfile quelle, ziel
Set oWSH = CreateObject("WScript.Shell")
strDesktop = oWSH.SpecialFolders("Desktop")
Set sh = CreateObject("WScript.Shell")
Set shortcut = sh.CreateShortcut(strDesktop & _
"\Testname-Verknüfung.lnk")
shortcut.IconLocation = "C:\Daten\Neuesicon.ico"
shortcut.Save
Set oCS = oWSH.CreateShortcut(strDesktop & _
"\Testname-Verknüfung.lnk")
With oCS
.TargetPath = "\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\\Exceltestdatei.xlsm\"
.Save
End With
Ich würde mich soooo sehr freuen, wenn Ihr mir helfen könntet.
P.s. das ist mein erster Post
Edit: es ist natürlich eine Frage und vielleicht mal eine Anleitung. Bitte sonst gern verschieben
Danke und viele Grüße
Seger
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 364111
Url: https://administrator.de/forum/mehrere-shortcuts-einen-sammel-ordner-und-neue-ico-auf-dem-desktop-anlegen-364111.html
Ausgedruckt am: 14.04.2025 um 03:04 Uhr
27 Kommentare
Neuester Kommentar
Moin,
ich tippe mal, dass VBS ein Problem damit hat, eine VErknüpfung anzulegen, wenn der Zielordner noch nicht existent ist...
Welchen Fehler erhältst du denn??
Bzgl. der flexibilität für die Anlage neue Shortcuts würde ich mir Funktionen bauen, und diese dann für jede neue Verknüpfung mit den erforderlichen Parametern aufrufen. Logisch betrachtet wie folgt:
Dann am besten noch eine Funktion einbauen, die dir prüft, ob deine Ordnerstruktur am Ziel existiert, wenn nicht, erstellen lassen. Hilfe findest du mit google/ hier im Board
Zu guter letzt noch etwaige Fehler abfangen.....
Aber mal anders:
wenn ihr eine AD-Struktur habt, warum lässt du die Verknüpfungen nicht via GPO erstellen?
geht viel einfacher/ schneller, als das irgendwie mit VBS/ Powershell/ Batch abzufackeln...
Gruß
em-pie
ich tippe mal, dass VBS ein Problem damit hat, eine VErknüpfung anzulegen, wenn der Zielordner noch nicht existent ist...
Welchen Fehler erhältst du denn??
Bzgl. der flexibilität für die Anlage neue Shortcuts würde ich mir Funktionen bauen, und diese dann für jede neue Verknüpfung mit den erforderlichen Parametern aufrufen. Logisch betrachtet wie folgt:
'Skript Starten
' OPTION EXPLICIT
'Funktionsaufrufe
strReturn = CreateShortcut("\Subfolder", "Testname-Verknüfung", "\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\Exceltestdatei.xlsm", "C:\Daten\Neuesicon.ico")
strReturn = CreateShortcut("\Subfolder4711", "Verknüfung0815", "\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\Exceltestdatei.xlsm", "C:\Daten\Neuesicon.ico")
...
'Funktionen
FUNCTION CreateShortcut(byVal ShortLoc, byVal ShortName, byVal Target, byVal IcoSrc)
' ShortLoc = Ort, an dem die Verknüpfung erstellt werden soll
' ShortName = Name der Verküpfung
' Target = Ziel, auf das die Verknüpfung verweisen soll
' IcoSrc = Pfad der ICO-Datei
DIM [deine Variablen]
Set oWSH = CreateObject("WScript.Shell")
strDesktop = oWSH.SpecialFolders("Desktop") 'ggf. anpassen
Set sh = CreateObject("WScript.Shell")
Set shortcut = sh.CreateShortcut(strDesktop & "\" & ShortName & ".lnk")
shortcut.IconLocation = "IcoSrc"
shortcut.Save
Set oCS = oWSH.CreateShortcut(strDesktop & "\" & ShortName & ".lnk")
With oCS
.TargetPath = ShortLoc
.Save
End With
IF Fehler <>0 THEN
'hier müsstest du dann noch Mechanismen einbauen, die Im Fehlerfalle eine Rückmeldung erzeugen
strError = "ich bin ein Fehler"
ELSE IF
strError = "ich bin kein Fehler"
END IF
CreateShortcut = strError 'hier gibst du den Fehler an den obigen Funktionsaufruf zurück
END FUNCTION
Dann am besten noch eine Funktion einbauen, die dir prüft, ob deine Ordnerstruktur am Ziel existiert, wenn nicht, erstellen lassen. Hilfe findest du mit google/ hier im Board
Zu guter letzt noch etwaige Fehler abfangen.....
Aber mal anders:
wenn ihr eine AD-Struktur habt, warum lässt du die Verknüpfungen nicht via GPO erstellen?
geht viel einfacher/ schneller, als das irgendwie mit VBS/ Powershell/ Batch abzufackeln...
Gruß
em-pie
Also,
Mit der von mir inhaltlich nicht getesteten und fix zusammengeschusterten Funktion hast du ein Grundgerüst, welches zunächst mal dafür sorgt, dass du deine Shortcuts erstellst.
Dadurch, dass du immer den selben Ablauf beim ANlegen von Shortcuts haben willst, macht es sinn, einmal einen Standard zu definieren (die Funktion) und diesen Standard dann mit den sich wechselden Parametern aufzurufen.
Du fütterst die Funktion dann nur noch mit den dynamischen Werten und der Rest läuft.
In meinem obigen Post/ Code, speziell Zeile 5 und 7 wird dann die Funktion aufgerufen und die Parameter mitgegeben. Hier wird keine Datei irgendwo hinkopiert, sondern die Funktion mit den erforderlichen Variablen gefüttert.
Mache dich mal mit VBS und Funktionen vertraut.
Als Tipp, wenn du vbs-Skripte testen willst:
cmd -> cscript.exe "Pfad zu deiner vbs-Date"
Solle es fehler geben, zeigt er die hier an...
dit:
baue deinen "Ordner erstellen"-Code in die Funktion mit ein, dann musst du das nicht bei jedem neuen Shortcut neu scripten.
Mit der von mir inhaltlich nicht getesteten und fix zusammengeschusterten Funktion hast du ein Grundgerüst, welches zunächst mal dafür sorgt, dass du deine Shortcuts erstellst.
Dadurch, dass du immer den selben Ablauf beim ANlegen von Shortcuts haben willst, macht es sinn, einmal einen Standard zu definieren (die Funktion) und diesen Standard dann mit den sich wechselden Parametern aufzurufen.
Du fütterst die Funktion dann nur noch mit den dynamischen Werten und der Rest läuft.
In meinem obigen Post/ Code, speziell Zeile 5 und 7 wird dann die Funktion aufgerufen und die Parameter mitgegeben. Hier wird keine Datei irgendwo hinkopiert, sondern die Funktion mit den erforderlichen Variablen gefüttert.
Mache dich mal mit VBS und Funktionen vertraut.
Als Tipp, wenn du vbs-Skripte testen willst:
cmd -> cscript.exe "Pfad zu deiner vbs-Date"
Solle es fehler geben, zeigt er die hier an...
dit:
baue deinen "Ordner erstellen"-Code in die Funktion mit ein, dann musst du das nicht bei jedem neuen Shortcut neu scripten.
Also eigentlich habe ich dir oben schon alles mitgegeben.
Ich halte es aber für wenig sinnvoll, dir ein komplettes Script zu geben, welches du nicht verstehst.
Denn wenn etwas angepasst werden muss, stehst du ja auf dem Schlauch ud fragst hier wieder.
Fange mal mit vbs klein an: https://www.a-coding-project.de/ratgeber/vbscript/prozeduren-und-funktio ...
Wenn du das Prinzip der Funktionen verstanden hast wirst du auch mit meinem obigen Script weiterkommen.
und baue bei den Versuchen aus dem o.g. Link immer ein
wscript.echo "Ausgabe: " & [deine Variable] ein, damit du die Ausgabe auch siehst.
Mit deiner Variante (mal unabhängig ob sie klappt oder nicht) hast du pro Verknüpfung ~ 30 Zeilen Code, bei 20 Verknüpfungen sind das ca. 600 Zeilen.
Mit meinem Ansatz ca. 40-50 Zeilen (mit Fehlerabfangen auch mal rund 60-90) in der Funktion plus je Shortcut 1-2 Zeilen. Das ganze ist also wesentlich übersichtlicher und performanter....
Ich halte es aber für wenig sinnvoll, dir ein komplettes Script zu geben, welches du nicht verstehst.
Denn wenn etwas angepasst werden muss, stehst du ja auf dem Schlauch ud fragst hier wieder.
Fange mal mit vbs klein an: https://www.a-coding-project.de/ratgeber/vbscript/prozeduren-und-funktio ...
Wenn du das Prinzip der Funktionen verstanden hast wirst du auch mit meinem obigen Script weiterkommen.
und baue bei den Versuchen aus dem o.g. Link immer ein
wscript.echo "Ausgabe: " & [deine Variable] ein, damit du die Ausgabe auch siehst.
Mit deiner Variante (mal unabhängig ob sie klappt oder nicht) hast du pro Verknüpfung ~ 30 Zeilen Code, bei 20 Verknüpfungen sind das ca. 600 Zeilen.
Mit meinem Ansatz ca. 40-50 Zeilen (mit Fehlerabfangen auch mal rund 60-90) in der Funktion plus je Shortcut 1-2 Zeilen. Das ganze ist also wesentlich übersichtlicher und performanter....

Warum nimmst du keine GPO für den Kram?
Naja, hier als Powershell
Tschö und nich zu viel bechern das Wochenende, das gibt Abzüg!
Gruß Snap
Naja, hier als Powershell
# Name des Ordners auf dem Desktop
$ordnername = "BlaBlub"
# Icon für den Ordner
$ordnericon = '\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\Ordnericon.ico'
# Links hier eintragen
$links = @"
"Demolink.lnk";"\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\datei.xlsm";"\\Server\Share\icon1.ico"
"Demolink.lnk";"\\sharpointseite.Pfad.com\sites\Test\Freigegebene Dokumente\Test\Test\datei2.xlsm";"\\Server\Share\icon2.ico"
"@ | ConvertFrom-Csv -Delimiter ";" -Header "Name","Ziel","Icon"
# ==================================
# Helper-Object zum Erstellen der Links
$shell = New-Object -Com Wscript.Shell
# Zielpfad auf dem Desktop
$targetpath = "$env:USERPROFILE\Desktop\$ordnername"
$localiconpath = "$env:APPDATA\myicons"
# Zielordner erstellen wenn nicht vorhanden
@($targetPath,$localiconpath) | %{if (!(Test-Path $_)){md $_ -Force | out-null}}
# Ordner-Icon lokal kopieren
copy-item $ordnericon -Destination $localiconpath
# Ordner muss das System-Attribut haben damit das Icon sichtbar wird
(Get-Item $targetpath).Attributes = 'Directory, System'
# desktop.ini für das Ordner-Icon erstellen
@"
[.ShellClassInfo]
IconResource=$localiconpath\$([IO.Path]::GetFileName($ordnericon)),0
"@ | sc "$targetpath\desktop.ini" -Force
# Desktop.ini Attribute hidden/system setzen
[System.IO.File]::SetAttributes("$targetpath\desktop.ini", [System.IO.FileAttributes]::Hidden)
# itteriere Links
$links | %{
# kopiere icon in einen lokalen Ordner wenn es noch nicht existiert
$iconpath = "$localiconpath\$([IO.Path]::GetFileName($_.Icon))"
if(!(Test-Path $iconpath)){copy-item $_.Icon -Destination $iconpath}
# Linkpfad zusammensetzen
$linkpath = "$targetpath\$($_.Name)"
write-host "Erstelle/Update Link '$linkpath'." -F Green
# Link erstellen
$lnk = $shell.CreateShortCut($linkpath)
$lnk.TargetPath = $_.Ziel
$lnk.IconLocation = $iconpath
$lnk.Save()
}
Gruß Snap
Moin,
auch wenn folgender Code, etwas größer ist, als der von Snapdragon, hier mal eine VBS-Variante, die dir die Ordnerstruktur rekusriv erstellt, wenn der Pfad, an dem die Verknüpfung hingeschrieben werden soll, nicht existiert:
vielleicht nicht sauber gescriptet/ ginge es auch etwas schlanker, aber es funktioniert....
auch wenn folgender Code, etwas größer ist, als der von Snapdragon, hier mal eine VBS-Variante, die dir die Ordnerstruktur rekusriv erstellt, wenn der Pfad, an dem die Verknüpfung hingeschrieben werden soll, nicht existiert:
OPTION EXPLICIT
'Funktionsaufrufe, je zu erstellender Verknüpfung ein Aufruf
fktCreateShortcut "my1stShortcut", "C:\tmp\VBSTEST\Shortcuts", "C:\tmp\logit.txt", "C:\tmp\icon.ico"
fktCreateShortcut "my2ndShortcut", "C:\tmp\VBSTEST\Shortcuts\Tools", "C:\tmp\logit.txt", "C:\tmp\icon_test.ico"
fktCreateShortcut "my3rdShortcut", "C:\tmp\VBSTEST\Shortcuts\Tools\3rdSub", "C:\tmp\logit.txt", "C:\tmp\icon_test.ico"
'die Funktionen
FUNCTION fktCreateShortcut(byVal argSCName, byVal argSCLocation, byVal argSCTarget, byVAL argSCIco)
DIM strSCName, strSCLocation, stSCTarget, strSCIco, strFuncName
DIM objShortcut, objWSh
strFuncName = "fktCreateShortcut: "
'die übergebenen Parameter in lokale Variablen schreiben
strSCName = argSCName
strSCLocation = fktCreateFolder(argSCLocation) 'weiterer Funktionsaufruf
stSCTarget = argSCTarget
strSCIco = argSCIco
'erstellen der Verknüpfung, sofern das Ziel vorhanden ist bzw. es beim erstellen keine Probleme gegeben hat
IF strSCLocation = argSCLocation Then
Set objWSh = CreateObject("Wscript.shell")
SET objShortcut = objWSh.CreateShortcut(strSCLocation & "\" & strSCName & ".lnk")
objShortcut.WindowStyle = 3 '3 = Maximized | 7 = Minimized | 4 = Normal
objShortcut.IconLocation = strSCIco
objShortcut.TargetPath = argSCTarget
objShortcut.Save
Set objWSh = Nothing
END IF
End Function
FUNCTION fktCreateFolder(byVal argFolder)
Dim objFSO, objFolder, CreateFolder
DIM strFuncName, strFolder, strReturn, strParentFolder, strReturnParent
DIM boolFolderExists
strFuncName = "fktCreateFolder: "
strFolder = argFolder
'wscript.echo strFuncName & strFolder
Set objFSO = CreateObject("Scripting.FileSystemObject")
IF NOT objFSO.FolderExists(strFolder) Then
'wscript.echo strFuncName & "Not exists: " & strFolder
strParentFolder = objFSO.GetParentFolderName(strFolder)
IF NOT objFSO.FolderExists(strParentFolder) Then
'wscript.echo strFuncName & "Not exists: " & strParentFolder
'wscript.echo strFuncName & "Create : " & strParentFolder
strReturnParent = fktCreateFolder(strParentFolder)
'wscript.echo strFuncName & "Created : " & strParentFolder & " (" & strReturnParent & ")"
END IF
'wscript.echo strFuncName & "Exists: " & strParentFolder
Set objFolder = objFSO.CreateFolder(strFolder)
CreateFolder = objFolder.Path
SET objFolder = Nothing
'Ordner neu erstellt
strReturn = strFolder
ELSE
'Ordner ist schon vorhanden
strReturn = strFolder
END IF
Set objFSO = Nothing
'wscript.echo strFuncName & " end " & strReturn
fktCreateFolder = strReturn
END Function
vielleicht nicht sauber gescriptet/ ginge es auch etwas schlanker, aber es funktioniert....

Zitat von @Seger85:
Eine Frage habe ich noch:
Doch leider wird beim Ordner auf dem Desktop nicht das Icon geändert und/oder eine Desktop.ini erstellt. Das Icon für den Ordner habe ich auch nicht im Ordner $localiconpath = "$env:APPDATA\myicons" gefunden.
Hast du noch eine Idee bzw. kannst du das nachvollziehen?
Jepp, da habe ich vergessen das Icon in den lokalen Ordner zu kopieren. Die Zeile wurde oben entsprechend ergänzt.Eine Frage habe ich noch:
Doch leider wird beim Ordner auf dem Desktop nicht das Icon geändert und/oder eine Desktop.ini erstellt. Das Icon für den Ordner habe ich auch nicht im Ordner $localiconpath = "$env:APPDATA\myicons" gefunden.
Hast du noch eine Idee bzw. kannst du das nachvollziehen?

Dat is normal, der Explorer hat die Änderung einfach noch nicht mitbekommen (Wie so vieles was er nicht merkt
), Shell neu starten oder an und abmelden.
.
Echt Genial wie klein und komfortabel das Script ist, danke nochmal .
Via GPO hättest du es noch komfortabler gehabt 
nur die Desktop.ini ist nicht angelegt und das Icon des Ordners bleibt das alte Ordnericon.
Doch wird hier einwandfrei angelegt!Dein User der das Skript ausführt hat sehr wahrscheinlich zu wenig Rechte um das System-Attribut zu setzen.
Edit: Skript wurde oben noch etwas angepasst

Zitat von @Seger85:
Eine "Kleinigkeit" noch, in der Desktop.ini ist mir der Punkt "IconResource=" aufgefallen der auf die Intranetseite verweist.
Schade, eigentlich habe ich das für dich als "Lern-Aufgabe" gelassen das zu korrigieren .. Eine "Kleinigkeit" noch, in der Desktop.ini ist mir der Punkt "IconResource=" aufgefallen der auf die Intranetseite verweist.
Wenns das dann war bitte noch einen Haken dran.
Gruß snap

Stichwort ExecutionPolicy sollte dir für deinen Lernerfolg reichen.