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-Key: 359370

Url: https://administrator.de/contentid/359370

Printed on: April 30, 2024 at 08:04 o'clock

Mitglied: 135051
Solution 135051 Dec 28, 2017 updated at 18:17:38 (UTC)
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
Member: rubberman
Solution rubberman Dec 28, 2017 at 16:27:20 (UTC)
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
Member: littleAdm
littleAdm Jan 04, 2018 at 07:26:42 (UTC)
Goto Top
@135051
Danke sehr, deine Lösung hat mir sehr weiter geholfen. Klappt super face-smile