littleadm
Goto Top

Multiple Verknüpfungen erstellen

Hallo alle zusammen,

ich habe das Problem dass ich für alle Unterordner eines spezifischen Ordners Verknüpfungen in einem anderen Ordner anlegen soll.
Da es sich hierbei um hunderte von Ordner handelt dachte ich mir, zu diesem Zweck eine kleine .bat-Datei zu schreiben. Jedoch funktioniert es weniger als erhofft... Da ich nicht so häufig mit .bat-Dateien in der Vergangenheit gearbeitet habe dachte ich mir, man könne mir hier helfen...

@echo off & setlocal

Set "QuellRoot=X:\"0.1 Laufend\Prüfungen 2007-2011""  
Set "ZielRoot=X:\0.1 Laufend\Übersicht\"  

@For %%i IN ("%QuellRoot%\*") do @(set "progtitel=%%i"   
set "progdir=X:\0.1 Laufend\Prüfungen 2007-2011"   
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut("%ZielRoot%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs   
echo objShortcut.TargetPath="%progdir%\%progexe%">>%temp%\MakeShortCut.vbs    
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs   
echo objShortcut.Save>>%temp%\MakeShortCut.vbs 
cscript //nologo %temp%\MakeShortCut.vbs 
)
del %temp%\MakeShortCut.vbs

Hierbei treten folgende Probleme auf: in der .vbs-Datei wird als Zielname des .lnk nicht der Ursprüngliche gewählt, sondern \Laufend\Prüfungen.lnk (obwohl ich als "läufer" "*" gesetzt habe)

Zum zweiten tritt das Problem auf, dass in der .vbs in der ersten Zeile das ")" nicht gesetzt wird, was ich nicht nachvollziehen kann, warum dieses nicht mit erzeugt wird.

In Zeile 3 habe ich zusätzliche "" setzen müssen, da cmd.exe mit dem Pfad ansonsten nicht arbeiten kann (denke liegt an den Leerzeichen im Pfad??). Dass er damit nicht arbeiten kann interpretiere ich daraus, dass er als Progtitel "\" setzt und alles andere leer bleibt...

Ich denke mal dass mir da grundlegend etwas schief gelaufen ist...

Das Programm sollte eigentlich in dem Ordner X:\0.1 Laufend\Prüfungen 2007-2011\ alle Unterordner nach einander anpacken und einen entsprechenden Link in den Ordner X:\0.1 Laufend\Übersicht\ schieben.

Ich danke schon einmal allen bei der Hilfestellung.

[Edit] Einen Tippfehler meinerseits korrigiert! [/edit]

Content-ID: 359370

Url: https://administrator.de/forum/multiple-verknuepfungen-erstellen-359370.html

Ausgedruckt am: 22.12.2024 um 17:12 Uhr

135051
Lösung 135051 28.12.2017 aktualisiert um 19:17:38 Uhr
Goto Top
Sonderzeichen wie Klammern etc. musst du "escapen"
Siehe
Verknüpfung erstellen bei Anwendern

http://www.robvanderwoude.com/escapechars.php

Und wenn du Variablen innerhalb einer FOR-Schleife setzt musst du DelayedExpansion anwenden und die Variablen mit Ausrufezeichen statt Prozentzeichen umklammern.
Das brauchst du hier aber eigentlich nicht wenn du es so schreibst:
@echo off & setlocal
chcp 1252
Set "QuellRoot=X:\"0.1 Laufend\Prüfungen 2007-2011""  
Set "ZielRoot=X:\0.1 Laufend\Übersicht\"  
set "progdir=X:\0.1 Laufend\Prüfungen 2007-2011"   
set "vbs=%temp%\MakeShortCut.vbs"  
>"%vbs%" (  
    echo Set objShortcut ^= WScript.CreateObject^("Wscript.Shell"^).CreateShortcut^("%ZielRoot%\" ^& Wscript.arguments^(0^) ^& ".lnk"^)  
    echo objShortcut.TargetPath ^= Wscript.arguments^(1^)
    echo objShortcut.WorkingDirectory ^= Wscript.arguments^(2^)
    echo objShortcut.Save
)

for /D %%a IN ("%QuellRoot%\*") do cscript //nologo "%vbs%" "%%~nxa" "%%a" "%progdir%"  
del "%vbs%" >nul  

Gruß @135051
rubberman
Lösung rubberman 28.12.2017 um 17:27:20 Uhr
Goto Top
Fängt schon mit Umlauten in Batchscripts an ...

Hybrid JScript (*.bat)
@if (@a)==(@b) @end /*

@echo off &setlocal

>nul chcp 1252
Set "QuellRoot=X:\0.1 Laufend\Prüfungen 2007-2011"  
Set "ZielRoot=X:\0.1 Laufend\Übersicht"  
>nul chcp 850

for /d %%i in ("%QuellRoot%\*") do cscript //nologo //e:jscript "%~fs0" "%ZielRoot%" "%%~dpi" "%%~nxi"  
pause

goto :eof */

var objShortcut = WScript.CreateObject('Wscript.Shell').CreateShortcut(WScript.Arguments(0)+'\\'+WScript.Arguments(2)+'.lnk');  
objShortcut.TargetPath = WScript.Arguments(1)+WScript.Arguments(2);
objShortcut.WorkingDirectory = WScript.Arguments(1);
objShortcut.Save();
Steffen
littleAdm
littleAdm 04.01.2018 um 08:26:42 Uhr
Goto Top
@135051
Danke sehr, deine Lösung hat mir sehr weiter geholfen. Klappt super face-smile