waldgnarf
Goto Top

temporärer vbs-Script zur Linkerstellung

Hallo liebe Geminde, ich habe den Script hier im Forum gefunden. Wollte fragen ob es möglich ist damit mehrere Links zu erstellt ohne das ich den Script dauernd wiederholen muss. Habe es mit for schleife versucht aber scheinbar irgendwas falsch gemacht.

@echo off & setlocal
:BEGINN
for /r %PFAD% %%f in (*.*) do (
set "DATEI=%%f"  
set "PFAD=%USERPROFILE%\Desktop\TEST"  
set "LINK=%USERPROFILE%\Desktop\TEST\%PFAD%.lnk"  
) 
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut("%LINK%")>>%temp%\MakeShortCut.vbs  
echo objShortcut.TargetPath="%PFAD%\%DATEI%">>%temp%\MakeShortCut.vbs  
echo objShortcut.WorkingDirectory="%PFAD%">>%temp%\MakeShortCut.vbs  
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
cscript //nologo %temp%\MakeShortCut.vbs
del %temp%\MakeShortCut.vbs
goto :BEGINN

Von vbs hab ich noch so gut wie überhaupt keine Ahnung, aber auch wenn den Teil mit in die Klammer packe wird nur eine Datei benannt und die Variable "DATEI" wird auch nicht gefunden.

Alternativ habe ich noch eine möglichkeit mit der rundll32 entdeckt:

RunDLL32 AppWiz.Cpl,NewLinkHere %1

Aber hier weiss ich nicht wie es und ob es automatisch anblaufen kann. Habe versucht noch was anzuhängen aber auch nach langer suche keine Beispiele zum erweitern gefunden.

Gruß waldgnarf


[Edit Biber] Auf formatiert.[/Edit]

Content-Key: 79725

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

Ausgedruckt am: 29.03.2024 um 07:03 Uhr

Mitglied: miniversum
miniversum 01.02.2008 um 14:14:51 Uhr
Goto Top
Versuchs mal so:
@echo off & setlocal

set "PFAD=%USERPROFILE%\Desktop\TEST"  

for /r %PFAD% %%f in (*.*) do call:MakeShortCut "%%f"  
)
del %temp%\MakeShortCut.vbs
goto:eof

:MakeShortCut 
set "DATEI=%%~1"  
set "LINK=%USERPROFILE%\Desktop\TEST\%%~n1.lnk"  

echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut("%LINK%")>>%temp%\MakeShortCut.vbs  
echo objShortcut.TargetPath="%PFAD%\%DATEI%">>%temp%\MakeShortCut.vbs  
echo objShortcut.WorkingDirectory="%PFAD%">>%temp%\MakeShortCut.vbs  
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
cscript //nologo %temp%\MakeShortCut.vbs
miniversum
Mitglied: rubberduck
rubberduck 01.02.2008 um 14:15:17 Uhr
Goto Top
Bitte mach eine Trennung, von dem Teil den Du gemacht hast und dem Teil den Du gefunden hast (Ist etwas einfacher zum Analysieren).

Und schliess das CODE-Tag mit <> und nicht mit ein.

...ohne das ich den Script dauernd wiederholen muss. Habe es mit for schleife versucht...
Was ist eine Schleife anderes als ein Wiederholung?
Mitglied: waldgnarf
waldgnarf 01.02.2008 um 15:12:45 Uhr
Goto Top
Danke für die Hilfe aber es kommt die Meldung ("und" ist syntaktisch an dieser Stelle nicht verarbeitbar.) es kommt auch keine Link-Datei.

@rubberduck
sry werd das nächste mal machen.
Wenn ich den vbs-Script nicht jedesmal für insgesamt 20 Datein einzeln wiederholen muss sondern nur die Variable "DATEI" neu zuweisen, und das ist ja nur ein kleiner Teil meiner Batch das ganze wird wesendlich leichter auch in andere Ordner wenn ich nur die Variablen ändern muss.
Mitglied: rubberduck
rubberduck 01.02.2008 um 15:52:04 Uhr
Goto Top
Ich bekomme gleich ein Kind...
Wie kommst Du auf einzeln wiederholen?

Der Batch muss eh ausgeführt werden, um das VBS zu erstellen.
Wieso nicht von Anfang an alles in einem VBS?
Du wirst es wahrscheinlich kaum glauben, aber mit VBScript kann man auch Variablen verwenden.

Statt ein ErstellMirEinenLink.BAT zu machen der ein MachIchChef.VBS erstellt, ausführt und am Schluss wieder löscht kannst Du ja ein IchMacheAllesChef.VBS machen (mit Variablen face-wink)
Mitglied: bastla
bastla 01.02.2008 um 16:02:37 Uhr
Goto Top
Hallo waldgnarf!

Bei der folgenden (ungetesteten) Variante wird das VBScript nur einmal erstellt und verwendet dann die beim Aufruf übergebenen Parameter:
@echo off & setlocal
set "PFAD=%USERPROFILE%\Desktop\TEST"  

set M=%temp%\MakeShortCut.vbs
echo Set objArgs=WScript.Arguments>%M%
echo Set objShell=WScript.CreateObject("WScript.Shell")>>%M%  
echo Set objShortcut=objShell.CreateShortcut(objArgs(1))>>%M%
echo objShortcut.TargetPath=objArgs(2)^&"\"^&objArgs(0)>>%M%  
echo objShortcut.WorkingDirectory=objArgs(2)>>%M%
echo objShortcut.Save>>%M%

for /r %PFAD% %%f in (*.*) do call:MakeShortCut "%%f"  

del %M%
goto:eof

:MakeShortCut 
set "DATEI=%%~1"  
set "LINK=%USERPROFILE%\Desktop\TEST\%%~n1.lnk"  
cscript //nologo  %M% "%DATEI%" "%LINK%" "%PFAD%"  
Zum Thema "vbs-Script nicht jedesmal für insgesamt 20 Datein einzeln wiederholen": Ich nehme an, dass damit das wiederholte Erstellen des Scripts gemeint war, denn ausführen musst Du es natürlich für jede einzelne Datei.

Grüße
bastla
Mitglied: waldgnarf
waldgnarf 01.02.2008 um 17:08:24 Uhr
Goto Top
Dann müsste ich ja die ganze Batch die schon zu 70% fertig ist in vbs (von was ich noch 0plan habe) umschreiben. Der Teil mit dem Links erstellen ist ja nur ein Schnipsel.

Ich dachte mir auch das es nicht anders geht aber dann wollt ich wenigstens den vbs-temp teil nur einmal rein setzen, darum das mit "for".
Habe keinen schimmer warum und was versuchen kann aber es kommt immer noch ("und" ist syntaktisch an dieser Stelle nicht verarbeitbar.)

Gruß waldgnarf
Mitglied: bastla
bastla 01.02.2008 um 17:21:05 Uhr
Goto Top
Hallo waldgnarf!

Hinsichtlich des Fehler sollte es helfen, wenn Du in der Zeile
for /r %PFAD% %%f in (*.*) do call:MakeShortCut "%%f"  
auch die Variable %PFAD% unter Anführungszeichen setzt, also:
for /r "%PFAD%" %%f in (*.*) do call:MakeShortCut "%%f"  
Dann müsste ich ja die ganze Batch die schon zu 70% fertig ist in vbs (von was ich noch 0plan habe) umschreiben.
Keineswegs - der VBS-Teil ist ja in den Batch integriert.

Grüße
bastla
Mitglied: waldgnarf
waldgnarf 01.02.2008 um 18:10:36 Uhr
Goto Top
Ist mir enfallen sry, das hilft mir jetzt schon sehr weiter.
Noch eine letzte Frage: ist es möglich den Dateinamen ohne Endung auch automatisch mit zu übernehmen?
Mitglied: bastla
bastla 01.02.2008 um 18:50:17 Uhr
Goto Top
Hallo waldgnarf!

... Dateinamen ohne Endung auch automatisch mit zu übernehmen?
Wohin willst Du ihn übernehmen? In eine Variable schreiben kannst Du ihn im Programmteil ":MakeShortCut" mit
set "Dateiname=%%~n1"  

Grüße
bastla
Mitglied: waldgnarf
waldgnarf 01.02.2008 um 19:18:29 Uhr
Goto Top
Ok, Danke

Gruß waldgnarf