91183
Goto Top

Verknüpfung mit Batch-Datei erstellen - Ziellaufwerk automatisch erkennen.

Hallo zusammen!

Ich habe vor kurzem meine Portablen Apps auf meinem USB-Stick aktualisiert.
Hierbei sind einige Programme hinzugekommen, sodass der ganze Spaß doch
recht unübersichtlich geworden ist. Daraufhin habe ich mir eine Batch-Datei
mit einem Auswahlmenü (Menü.bat) geschrieben, welche mir das Suchen bzw. hunderte
Verknüpfungen auf dem Desktop erspart (diese funktioniert auch einwandfrei).
Da ich die Apps nicht nur auf dem USB-Stick sondern auch auf einer CD brauche,
habe ich für die CD kurzerhand noch eine Autorun.inf geschrieben, die die Batch-Datei
gleich beim einlegen startet und zusätzlich für spätere Aufgaben noch eine Verknüpfung
zur der Datei „Menü.bat“ herstellt.

Habe dann versucht über Google Infos zu erhalten, wie man so etwas aufbaut und bin auch
beim folgenden Thread recht schnell fündig geworden.

Verknüpfungen erstellen

Die Idee mit dem temporären VBScript fand ich sehr gut. Allerdings habe ich noch ein paar
Probleme, da ich mich noch nicht allzu sehr mit VBscripten beschäftigt habe.

- Die Batchdatei soll vor dem erstellen überprüfen, ob bereits eine gleichnamige
Verknüpfung auf dem Desktop vorhanden ist und fragen bevor sie diese ersetzt.
Bin mir dabei nicht sicher, ob der Befehl in das temp. Script selbst gehört oder davor.

- Das temp. Script müsste (zumindest im Falle der CD) auf der Harddisk erstellt
werden. Wobei ich glaube, dass das auch in dem Beispiel schon richtig sein müsste.

- Der Verknüpfung müsste ein bestimmtes Icon (welches auf der CD ist) beim Erstellen
zugewiesen werden.

- Die Batchdatei müsste das Ziel der zu erstellenden Verknüpfung selber erkennen.
Soll heißen, wenn das CD- / DVD-Laufwerk den Buchstaben E hat, muss die Verknüpfung
das Ziel „E:\Menü.bat“ haben. Wenn das Laufwerk den Buchstaben F trägt ………..
Ist glaube ich klar, was ich meine.


Ich denke mal das letzte Problem dürfte wohl das schwierigste sein.
Hoffe Ihr könnt mir da weiterhelfen.

Gruß
Xeno

Content-Key: 144613

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

Printed on: April 19, 2024 at 20:04 o'clock

Member: bastla
bastla Jun 10, 2010 at 20:22:59 (UTC)
Goto Top
Hallo Xeno-- und willkommen im Forum!

Etwas für Dich zum Testen (ich hab's nämlich nicht gemacht face-wink):
@echo off & setlocal

::Falls das Symbol auf den Desktop soll:
set "zielpfad=%userprofile%\Desktop"  

::Name der Verknüpfung (ohne ".lnk") 
set "progtitel=Menue"  
::Icon-Datei
set "icon=Menue.ico"  
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet) 
::ist Rootverzeichnis des Laufwerkes, von dem der Batch gestartet wurde
set "progdir=%~d0"  
set "progexe=Menue.bat"  
::Kommentar
set "beschreibung=Erklaerung eigentlich unnoetig ..."  

::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben "zielpfad") 
::(eigentlich nicht nötig, sollte aber auch nicht schaden):
md "%zielpfad%" 2>nul  
if not exist "%zielpfad%\%progtitel%.lnk" goto :Neu  
set /p Eingabe=Es gibt bereits eine Verknuepfung "%progtitel%" auf dem Desktop - ersetzen (J/N)?  
if /i "%Eingabe:~,1%" neq "j" (echo Es wird keine Verknuepfung erstellt! & pause & goto :eof)  

:Neu
::temporäres VBScript erzeugen ...
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs  
echo objShortcut.TargetPath="%progdir%\%progexe%">>%temp%\MakeShortCut.vbs  
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs  
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs  
echo objShortcut.IconLocation="%progdir%\%icon%,0">>%temp%\MakeShortCut.vbs  
echo objShortcut.Save>>%temp%\MakeShortCut.vbs

::... ausführen ...
cscript //nologo %temp%\MakeShortCut.vbs

::... und wieder löschen.
del %temp%\MakeShortCut.vbs
Bitte beachten: Es ist in einem Batch einfacher ohne Umlaute - deshalb habe ich oben auch "Menue" in den Dateinamen verwendet ...

Außerdem habe ich vorausgesetzt, dass die "Menue"-Dateien, wie angekündigt, im Root-Verzeichnis liegen (also zB "E:\Menue.bat").

Grüße
bastla

P.S.: Heutzutage wirst Du vermutlich für die Ausführung der "autorun.inf" auf das Prinzip "Hoffnung" setzen müssen ... face-wink
Mitglied: 60730
60730 Jun 10, 2010 at 20:30:06 (UTC)
Goto Top
Moin,
Zitat von @91183:
Hallo zusammen!
- Die Batchdatei soll vor dem erstellen überprüfen, ob bereits eine gleichnamige
Verknüpfung auf dem Desktop vorhanden ist und fragen bevor sie diese ersetzt.
Bin mir dabei nicht sicher, ob der Befehl in das temp. Script selbst gehört oder davor.

probiers doch aus - die Zeile kannst du doch sowohl als auch - schadet ja nicht, denn "nach" dem installieren kann man auch nachschauen, ob die Datei erzeugt wude
.
if exist %userprofile%\Desktop\meine.lnk" echo ist schon da  

- Die Batchdatei müsste das Ziel der zu erstellenden Verknüpfung selber erkennen.
Soll heißen, wenn das CD- / DVD-Laufwerk den Buchstaben E hat, muss die Verknüpfung
das Ziel „E:\Menü.bat“ haben. Wenn das Laufwerk den Buchstaben F trägt ………..
Ist glaube ich klar, was ich meine.

echo dein aktuelles Laufwerk ist %cd%
echo %cd% |find "%systemdrive%" && echo die batch läuft auf der Festplatte  
pause

Rest - (eigentlich auch diese Schnippsel) findest du auch hier.
Gruß

Edit el Maestro ist ja viel schneller und wie üblich ausführlicher gewesen.../edit
Member: bastla
bastla Jun 10, 2010 at 20:36:08 (UTC)
Goto Top
@Timo
Auch wenn's hier auf das annähernd gleiche Ergebnis hinauslaufen sollte - %cd% bezieht sich auf den aktuellen Pfad; um den Speicherort des Batches zu finden, steht %0 mit den Möglichkeiten
%~d0  = Laufwerk
%~dp0 = Laufwerk mit Pfad und abschließendem "\"
%~f0  = Vollständiger Pfad inkl. Dateiname und Erweiterung
zur Verfügung.

Grüße
bastla
Mitglied: 60730
60730 Jun 10, 2010 at 20:43:53 (UTC)
Goto Top
@bastla - schon klar, aber irgendwann hatt ich mal ein anotobak System und das konnte nur %cd%.
IMHo WInblows 9x oder sowas, das kannte den ganze Tüddelkram, der hinter...

Zusätzlich wurde die Ersetzung von Verweisen auf FOR-Variablen erweitert.
Sie können jetzt folgende Syntax verwenden:

steht nicht - ich mein es war 9x - aber bei dem Wetter arbeitet das feuchte Brötchen zwischen meinen Ohren auch nur auf Lowlevel face-wink

Gruß

nö - zur Feier des tages und weil du auch immer mehrere Grüße schickst..

Grüzi zurück
Member: bastla
bastla Jun 10, 2010 at 20:47:48 (UTC)
Goto Top
[OT]
@Timo
Brötchen bleiben bei mir nicht lange genug zwischen den Ohren, um dort feucht zu werden ... face-wink
Mit 9x liegst Du jedenfalls richtig (und danke, dass Du die darauf folgende Katastrophe nicht erwähnt hast face-wink).

Noch ein paar Grüße mehr
bastla
[/OT]
Mitglied: 91183
91183 Jun 10, 2010 at 22:28:20 (UTC)
Goto Top
Hallo noch mal!

Erst einmal: DANKE!!!!!!!!!!!!!!!!!!!!
Die Antworten kamen ja mal richtig schnell und alles funktioniert super. .-)

@bastla:
Mit der Aussage über die Autorundatei hattest Du Recht. Die funktioniert
nicht so gut. Das Icon wird zwar übernommen aber mit „autorun“ ist nicht viel.
Hast Du da vll. noch einen Vorschlag, wie ich das mit dem automatischen Starten
hinbekomme?

Ach so, bevor ich es vergesse. Was muss ich in dem Script ändern, damit er ein
anderes Icon benutzt? Sprich, eines aus der shell32.dll bzw. aus einem anderen Verzeichnis.

Ansonsten zeigt die Verknüpfung auf dem Desktop das Symbol nicht an, wenn keine CD
eingelegt ist. Ist zwar nicht so wichtig aber es sieht besser aus. Und ja, ich stell mich manchmal etwas an .-)

Ich hatte mir gedacht, dass man evt. die Icondatei von de CD in den Ordner Eigene Dateien
oder einen anderen auf der HDD kopieren könnte und dann die Verknüpfung mit dem Symbol
verbinden kann. Also über „%USERPROFILE%\Eigene Dateien\“ oder so.
Allerdings bin ich mir nicht sicher, ob ich für das verschieben eine extra Batchdatei anlegen
muss oder man das ins VBScript aufnehmen kann.

Danke noch mal!
Gruß
Xeno
Member: bastla
bastla Jun 10, 2010 at 22:44:36 (UTC)
Goto Top
Hallo Xeno--!

Beim Thema "Autostart" sehe ich eher schwarz ...
Das Icon wird in den Zeilen 9 bzw 31 festgelegt - um "shell32.dll" zu verwenden könntest Du die Zeile 31 auf
echo objShortcut.IconLocation="%SystemRoot%\System32\shell32.dll,0">>%temp%\MakeShortCut.vbs
ändern - die 0 musst Du selbst gegen die Nummer des gewünschten Icons austauschen.

Um ein eigenes Icon vorweg zu kopieren, könntest Du zwischen Zeile 24 und 25 einfügen:
copy "%progdir%\%icon%" "%userprofile%"
und dann die folgende Zeile 31 verwenden:
echo objShortcut.IconLocation="%userprofile%\%icon%,0">>%temp%\MakeShortCut.vbs
Das VBScript ist eigentlich immer nur für das eigentlich Erstellen der Verknüpfung auf Basis der festgelegten Werte / Variablen zuständig ...

Grüße
bastla