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...
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]
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]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 359370
Url: https://administrator.de/contentid/359370
Ausgedruckt am: 17.11.2024 um 11:11 Uhr
3 Kommentare
Neuester Kommentar
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:
Gruß @135051
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
Fängt schon mit Umlauten in Batchscripts an ...
Hybrid JScript (*.bat)
Steffen
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();