phlegma
Goto Top

(batch)(vbs) ShortCut Ziel und Befehl

Moin, ich melde mich am wieder ...
hab mal wieder ein tolles problem mitgebracht...
eigentlich müsste ich im VB bereich posten aber mein proggi basiert auf batch und davon versteh ich viel mehr..

also,
ich hab da folgenden script:
@echo off
set progtitel=XXX
set progname=XXX XXX XXX
set progdir=XXX
set progexe=XXX.exe
set zielpfad=c:\XXX
md "%userprofile%\Startm~1\Programme\%progdir%\"  
echo '                  MakeShortCut.vbs >%temp%\MakeShortCut.vbs  
echo. >>MakeShortCut.vbs
echo Const strProgramTitel="UnInstall" >>%temp%\MakeShortCut.vbs  
echo Const strProgram="%zielpfad%\Install.exe" deinstall >>%temp%\MakeShortCut.vbs  
echo Const strProgramOrt="%zielpfad%" >>%temp%\MakeShortCut.vbs  
echo Const StrProgramDescript="DeInstallation von %progdir%" >>%temp%\MakeShortCut.vbs  
echo Const strProgramMenuOrt="Programme\%progdir%" >>%temp%\MakeShortCut.vbs  
echo Dim objShortcut >>%temp%\MakeShortCut.vbs
echo Dim objShell >>%temp%\MakeShortCut.vbs
echo Set objShell= WScript.CreateObject("Wscript.Shell") >>%temp%\MakeShortCut.vbs  
echo strLPfad=objShell.SpecialFolders("Startmenu") >>%temp%\MakeShortCut.vbs  
echo Set objShortcut=objShell.CreateShortcut(strLPfad ^& _ >>%temp%\MakeShortCut.vbs
echo "\" ^& strProgramMenuOrt ^& "\" ^& strProgramTitel ^& ".lnk") >>%temp%\MakeShortCut.vbs  
echo objShortcut.TargetPath= strProgram >>%temp%\MakeShortCut.vbs
echo objShortcut.Description= strProgramDescript >>%temp%\MakeShortCut.vbs
echo objShortcut.WorkingDirectory = strProgramort >>%temp%\MakeShortCut.vbs
echo objShortcut.Save >>%temp%\MakeShortCut.vbs
cscript //nologo %temp%\MakeShortCut.vbs
pause
dieser ist auch funktionsfähig wenn man das deinstall in der 4 zeile wegnimmt, das frisst er nicht.
also was ich eig möchte:
eine verknüpfung im startmenü zu meienr install.exe (komplierte batch datei) und diese soll mit dem parameter deinstall gestartet werden, denn dadruch wird in der batch der teil mit der deinstallation gestartet.

aber wie schon oben gesagt mag er mein deinstall nicht.

was ich bereits probiert habe:
ursprungsform:
echo Const strProgram="%zielpfad%\Install.exe" deinstall >>%temp%\MakeShortCut.vbs  
2tens:
echo Const strProgram="%zielpfad%\Install.exe deinstall" >>%temp%\MakeShortCut.vbs  
geht nicht, und da liegt auch im folgenden das problem, weil das ziel dann deinstall in den anführungszeichen beinhaltet.
3tens:
echo Const strProgram="%zielpfad%\Install.exe" >>%temp%\MakeShortCut.vbs  
echo Const strProgramDO="deinstall" >>%temp%\MakeShortCut.vbs  
[...]
echo objShortcut.TargetPath= strProgram ^& " " ^& strProgramDO>>%temp%\MakeShortCut.vbs  
produziert das selbe wie 2tens

ok daraus komme ich zu dem schluss das ich mit meinem latein am ende bin...

ich würde mich sehr über hilfe freuen!

nochmal damit ich nicht falsch verstanden werde:
ich brauche in der zeile Ziel der Verknüpfung den pfad in anführungszeichen und danach meinen befehl... vllt lässt er sich ja auch nachträglich hinzufügen?

andere lösungen die zum selben ergebnis führen und nicht unverständlich sind für mich sind auch willkommen! (bitte nur batch, nach möglichkeit kein vbs, jedenfalls nicht unverständlichers als das was hier is...^^vor allem @bastla :D)

thx
gruß, Ph

Content-ID: 53728

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

Ausgedruckt am: 22.11.2024 um 05:11 Uhr

bastla
bastla 10.03.2007 um 14:39:41 Uhr
Goto Top
Hallo Phlegma!

Wenn's was leicht Verständliches face-wink sein soll, vielleicht so (als zusätzliche Zeile):
echo objShortcut.Arguments = "deinstall" >>%temp%\MakeShortCut.vbs  

Grüße
bastla
Biber
Biber 10.03.2007 um 15:17:18 Uhr
Goto Top
@bastla
Jepp... ist das Sinnvollste und Lesbarste.

Theoretisch würde es auch funktionieren wenn der Programmpfad (der wegen der Leerzeichen in Anführungszeichenstehen muss)
im VBS maskiert wäre.
Also die Anführungszeichen nicht als ["], sondern als [ chr(34)] geschrieben werden würden.

An dem obigem Codeschnipsel durchgekaspert würde dann so etwas schwer les/wartbares rauskommen:
::----DerPhlegma.bat
@echo off
set progtitel=XXXTitel
set progname=XXX XXX Name XXX
set progdir=XXXProgdir
set progexe=XXXExe.exe
set zielpfad=c:\XXXZielpfad
REM so setzen zum Testen: Set Target=con:
Set target=%temp%\MakeShortCut.vbs
md "%userprofile%\Startm~1\Programme\%progdir%\"  
(echo '                  MakeShortCut.vbs  
echo. 
echo Const strProgramTitel="UnInstall"  
echo Const strProgram= "%zielpfad%\Install.exe"  
echo Const strProgrammDeInstPar=" deinstall"  
echo Const strProgramOrt="%zielpfad%"  
echo Const StrProgramDescript="DeInstallation von %progdir%"  
echo Const strProgramMenuOrt="Programme\%progdir%"  
echo Dim objShortcut
echo Dim objShell
echo Set objShell= WScript.CreateObject^("Wscript.Shell"^)  
echo strLPfad=objShell.SpecialFolders^("Startmenu"^)  
echo Set objShortcut=objShell.CreateShortcut(strLPfad ^& _ 
echo "\" ^& strProgramMenuOrt ^& "\" ^& strProgramTitel ^& ".lnk"^)  
:: ## neue Zeile folgt
echo objShortcut.TargetPath= chr^(34^) ^& strProgram ^& chr^(34^) ^& StrProgramDeInstPar 
::## Ende neueZeile
echo objShortcut.Description= strProgramDescript
echo objShortcut.WorkingDirectory = strProgramort
echo objShortcut.Save )>%target%
cscript //nologo %target%
pause

...mit mehreren Konsequenzen, die die Lesbarkeit erschweren.
a) Ich habe jetzt (z.T.überflüssiger-, zum Teil notwendigerweise) alle runden Klammern und alle Ampersamds in den "echo"-Zeilen mit Caret maskiert.
Sieht grottig aus.
b) zu überprüfen ist, inwieweit hier unnötige, nein nicht Komplexität, sondern lieber auf Deutsch: Kompliziertheit *gg hineinkommt durch die Deklaration der strXXX-Variablen als "Const". Dadurch kann ich oben nicht strProgram und strProgramDeInstPar zusammenfassen. Da ich bei "Const"-Deklararionen natürlich nicht die Funktion chr(34) aufrufen darf.

Empfehle also auch bastla's Lösung --- meine Variante nur for educational purposes.

Gruss
Biber
bastla
bastla 10.03.2007 um 15:23:21 Uhr
Goto Top
@Biber

Ich fürchte, auch so wird's nix - beim ".Save" wird der (gesamte) Target-Eintrag überprüft und beim Vorhandensein eines Leerzeichens dieses auf Teufel komm raus mit Anführungszeichen "einzufangen" versucht - zumindest meinen Tests zufolge ...

Grüße
bastla

P.S.: Wenn's denn educational sein soll: Die Anführungszeichen könnte man/frau/kind ganz unmaskiert auch per "" hinbekommen - konkret:
echo Const strProgram = """%zielpfad%\Install.exe"""  
Biber
Biber 10.03.2007 um 15:44:33 Uhr
Goto Top
@bastla

Stimmt - hab grad den Schnipsel durchlaufen lassen.
Verknüpfung wird (ohne Fehlermeldungen) angelegt, aber in dem neuen Link kommt kein Deinstall-Parameter an.
("Ziel" in den Eigenschaften des Links ist "C:\XXXZielpfad\Install.exe").

Noch ein Grund mehr für Deine Lösung.
Es hatte mich offengestanden auch gestört, wenn das Property "TargetPath"/"Ziel" zusätzlich zum Programmnamen auch für Programmparameter vorgesehen wäre.

Schönes Wochenende
Biber
Phlegma
Phlegma 10.03.2007 um 16:50:07 Uhr
Goto Top
danke!!

schöne fachdiskussion... face-smile

ich bevorzuge erste lösung da sie einfach die einfachste ist..^^

werde ich sofort einbauen!

thx! Ph