hacklefeucht
Goto Top

Verknüpfungen ohne Pfadangaben (relativer Pfad) auf USB Stick, egal welcher Laufwerksbuchstabe zugewiesen wurde

Hallo liebe Administrator(inn)en,

für folgendes Szenario, hätte ich gern eine elegante Lösung und hoffe ihr habt eine nette Idee:

ich möchte ein USB Stick mit Portablen Tools betanken, die in entsprechenden Verzeichnisen liegen.
In dem untersten Verzeichnis sollen Verknüpfungen liegen, die im entsprechenden Verzeichnis eine
exe starten, egal welcher Laufwerksbuchstabe dem Stick zugewiesen wurde.

Über ein paar Nachrichten würde ich mich sehr freuen.

Content-ID: 582018

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

Ausgedruckt am: 21.11.2024 um 15:11 Uhr

144705
144705 25.06.2020 aktualisiert um 11:09:35 Uhr
Goto Top
Als portabler Starter mit auf den Stick
http://www.pegtop.net/start/

Oder eben über ne Batch den Buchstaben auf dem die Batch liegt auslesen
%~d0
Und über einen Parameter das gewünschte Programm übergeben
@echo off
start "" "%~d0\%~1"  
Starten dann mit
meinebatch.cmd "Subfolder\datei.exe"  
hacklefeucht
hacklefeucht 25.06.2020 aktualisiert um 11:28:47 Uhr
Goto Top
Hallo latavia,

PStart ist schon eine nette Idee, ich hätte es aber gerne selber gebastelt.
Bei Systemordnern weiß ich das es klappt, zum Beispiel mit %SystemRoot%\System32\cmd.exe
damit ist der zugewiesene Laufwerksbuchstabe ja auch irrelevant. Ich hatte
die vage Hoffnung das es eine relative Pfadangabe gibt wie:
%hier%\firefox\firefox.exe

Egal, aber trotzdem danke das Du geschaut und sogar geschrieben hast.

etwas später: ahh mit Batch teste ich mal, super.
TomTomBon
TomTomBon 25.06.2020 um 16:17:16 Uhr
Goto Top
Moin Moin,

%~d0 kannte Ich noch gar nicht, danke.

Ich arbeite meistens mit
%~0
%~n0

Aber jetzt habe Ich etwas gespielt face-smile

Szenario:
CMD mit Admin Rechten spielt eine test.bat.
Die Ergebnisse sind:

echo %~0
::Ausgabe:			c:\TMP-DATA>echo test.bat 
echo %~a0
::Ausgabe:			c:\TMP-DATA>echo --a-------- 
echo %~d0
::Ausgabe:			c:\TMP-DATA>echo c: 
echo %~f0
::Ausgabe:			c:\TMP-DATA>echo c:\TMP-DATA\test.bat 
echo %~n0
::Ausgabe:			c:\TMP-DATA>echo test 
echo %~p0
::Ausgabe:			c:\TMP-DATA>echo \TMP-DATA\ 
echo %~s0
::Ausgabe:			c:\TMP-DATA>echo c:\TMP-DATA\test.bat 
echo %~t0
::Ausgabe:			c:\TMP-DATA>echo 25.06.2020 16:06 
echo %~x0
::Ausgabe:			c:\TMP-DATA>echo .bat 
echo %~z0
::Ausgabe:			c:\TMP-DATA>echo 434 




echo %~0\%~1
::Ausgabe:			c:\TMP-DATA>echo test.bat\ 
echo %~a0\%~1
::Ausgabe:			c:\TMP-DATA>echo --a--------\ 
echo %~d0\%~1
::Ausgabe:			c:\TMP-DATA>echo c:\ 
echo %~f0\%~1
::Ausgabe:			c:\TMP-DATA>echo c:\TMP-DATA\test.bat\ 
echo %~n0\%~1
::Ausgabe:			c:\TMP-DATA>echo test\ 
echo %~p0\%~1
::Ausgabe:			c:\TMP-DATA>echo \TMP-DATA\\ 
echo %~s0\%~1
::Ausgabe:			c:\TMP-DATA>echo c:\TMP-DATA\test.bat\ 
echo %~t0\%~1
::Ausgabe:			c:\TMP-DATA>echo 25.06.2020 16:06\ 
echo %~x0\%~1
::Ausgabe:			c:\TMP-DATA>echo .bat\ 
echo %~z0\%~1
::Ausgabe:			c:\TMP-DATA>echo 434\ 

Dies ist für mich und andere zur Info face-smile

Ich weiß jetzt noch nicht wozu
%~1
und
%~z0
taugen, aber das bekomme Ich raus wenn Ich Zeit habe face-smile

Der Rest ist selbst redend meiner Meinung nach.


Just my Senf
Thomas
144705
144705 25.06.2020 aktualisiert um 16:50:08 Uhr
Goto Top
Zitat von @TomTomBon:

Moin Moin,

%~d0 kannte Ich noch gar nicht, danke.


Thomas

Ein for /? in die Konsole eintippen hätte dich auch erleuchtet ... Hier steht es auch
https://ss64.com/nt/syntax-args.html
hacklefeucht
hacklefeucht 25.06.2020 um 16:50:27 Uhr
Goto Top
Oha, Thomas, ...... meine Güte,

Heidewitzka, Hagel und Granaten.

Danke
TomTomBon
TomTomBon 26.06.2020 um 07:12:28 Uhr
Goto Top
Das habe Ich beim ausprobieren gestern auch gesehen face-smile

Klassische Geschichte.
Ich brauchte den Aspekt, hatte zu dem Zeitpunkt keine Zeit mir die Hintergründe von %~0 und %~n0 anzuschauen und später nicht darüber mehr nachgedacht face-smile
In meinem Job ist das scripten klein geschrieben face-smile

Danke aber.
PeterleB
Lösung PeterleB 26.06.2020 um 12:19:53 Uhr
Goto Top
Hallo,

es geht auch mit batch.

Zum Bsp. ProcExpl.bat
"\PortApps\_System\SysInternals Suite\procexp64.exe"  

Da brauchst Du keinen LW-buchstaben.

Gruß
Peter
hacklefeucht
hacklefeucht 26.06.2020 um 12:56:32 Uhr
Goto Top
Heeeeeyyyy PeterleB,

das gefällt mir richtig gut, in Kombination mit

start "\FileZillaPortable\FileZillaPortable.exe"  


wird die Console nach dem Aufruf auch gleich wieder geschlossen. face-smile

SEXY, um nicht zu sagen *AffenTittenGeil* :D

Danke PeterleB !!
PeterleB
PeterleB 26.06.2020 um 14:19:14 Uhr
Goto Top
Hallo,

und wenn Du noch einen Bat To Exe Converter verwendest,
braucht es gar kein cmd-Fenster.

Gruß
Peter
144705
144705 26.06.2020 aktualisiert um 15:30:07 Uhr
Goto Top
Zitat von @PeterleB:
und wenn Du noch einen Bat To Exe Converter verwendest,
braucht es gar kein cmd-Fenster.
Aber einen der die Virenscanner dann abschalten muss oder Ausnahmen in diesen hinzufügt face-wink. Verkappte CMDs als EXE mitzuschleppen ist meist eine sehr schlechte Idee. Dann lieber per VBS unsichtbar starten. Oder sich selbst einen Wrapper schreiben.
CreateObject("Wscript.Shell").Run "cmd /c script.cmd",0,False  
Aber damit kannst du ja auch direkt auf ne CMD verzichten und das ganze Starten in die VBS verlagern.
CreateObject("Wscript.Shell").Run "prog.exe"  
PeterleB
PeterleB 27.06.2020 um 14:35:18 Uhr
Goto Top
Deine Idee ist gut, aber dann klappt dieser Aufruf nicht mehr:

CreateObject("Wscript.Shell").Run "\PortApps\_System\SysInternals Suite\procexp64.exe"  

Es ging ja um den Programmaufruf, ohne den LW-Buchstaben zu kennen.

Gruß
Peter
144705
144705 27.06.2020 aktualisiert um 16:32:40 Uhr
Goto Top
Zitat von @PeterleB:

Deine Idee ist gut, aber dann klappt dieser Aufruf nicht mehr:

> CreateObject("Wscript.Shell").Run "\PortApps\_System\SysInternals Suite\procexp64.exe"  
> 

Es ging ja um den Programmaufruf, ohne den LW-Buchstaben zu kennen.
Doch das ist ja das geringste Problem face-wink
Set fso = CreateObject("Scripting.FileSystemobject")  
CreateObject("Wscript.Shell").Run """" & fso.BuildPath(fso.GetParentfolderName(wscript.ScriptFullname), "\PortApps\_System\SysInternals Suite\procexp64.exe") & """"  
PeterleB
PeterleB 27.06.2020 aktualisiert um 16:28:46 Uhr
Goto Top
Phantastisch!
Dankeschön.

Es funktioniert aber erst, wenn ich das Leerzeichen im Pfad physisch und im Befehl entferne.
Gibt es dazu eine Alternative? Doppelte Anführungszeichen oder irgendwie anders?

Gruß
Peter
144705
144705 27.06.2020 aktualisiert um 16:33:19 Uhr
Goto Top
Auch kein Problem, siehe Ergänzung oben.
PeterleB
PeterleB 27.06.2020 um 16:44:19 Uhr
Goto Top
Man kann nur staunen.
Nochmals Danke.
144705
144705 27.06.2020 um 19:31:36 Uhr
Goto Top
Büddebüdde
hacklefeucht
hacklefeucht 29.06.2020 um 07:36:30 Uhr
Goto Top
Meine Damen, meine Herren,

heiliges Ofenrohr, jetzt hab ich erst mal einiges zu ausprobieren.
Stressfreien Dienst euch allen. Ich bin total begeistert, Danke Danke.
PeterleB
PeterleB 29.06.2020 aktualisiert um 11:26:39 Uhr
Goto Top
Noch eine Frage dazu:

Wie muss es aussehen, wenn das Programm mit Admin-Rechten ausgeführt werden soll?
Ich habe folgendes gefunden.

"RunAs /noprofile /user:administrator "  

CreateObject("Wscript.Shell").Run "RunAs /noprofile /user:administrator " """" & fso.BuildPath(fso.GetParentfolderName(wscript.ScriptFullname), "\PortApps\_System\SysInternals Suite\procexp64.exe") & """"  

Die Anführungszeichen und das "&" müssen sicher korrigiert werden.
Und dann muss auch noch das PW per sendkeys übergeben werden.

Gibt eine Möglichkeit, das Ganze ohne PW-Abfrage zu erreichen?
Bei
cmd.exe /s /k pushd "%V"  

geht das doch auch.

Gruß
Peter
TomTomBon
TomTomBon 29.06.2020 um 15:14:19 Uhr
Goto Top
Moin,

Ich nehme folgende Zeile um Adminrechte zu erfragen (das Skript wird anschließend elevated ausgeführt. Auch als Nicht Admin face-wink (Da wird nach Admin PW gefragt.)

copy "%~0" "c:\TMP-DATA\CMD\%~n0.cmd"
set Auszufuehrend="c:\TMP-DATA\CMD\%~n0.cmd"

:ask_for_ADMIN-Rights

Ich hatte Probleme das manche das Skript aus dem Netz aufrufen wollten, dies aber so nicht möglich war.
Z.B. weil der Admin kein Zugriff hatte.
Ich kopiere es immer nach c:\TMP-DATA\CMD und starte von hier face-smile
PeterleB
PeterleB 29.06.2020 aktualisiert um 18:09:38 Uhr
Goto Top
Sorry, das ist nicht ganz, was mir vorschwebt.

Ich möchte diesen Ansatz umsetzen:
Option explicit
Dim oShell
set oShell= Wscript.CreateObject("WScript.Shell")  
'Replace the path with the program you wish to run c:\program files...  
oShell.Run "RunAs /noprofile /user:administrator ""C:\Program Files\Microsoft Office\OFFICE11\WINWORD.EXE"""  
WScript.Sleep 100
'Replace the string --> yourpassword~ with the  
'password used on your system. Include the tilde "~"  
oShell.Sendkeys "yourpassword~"  
Wscript.Quit

Ich weiß nur nicht, wie beim Befehl CreateObject("Wscript.Shell").Run ... die Anführungszeichen mit dem "&" richtig gesetzt werden.
144705
144705 29.06.2020 aktualisiert um 18:10:31 Uhr
Goto Top
Wie muss es aussehen, wenn das Programm mit Admin-Rechten ausgeführt werden soll?
Das VBS muss schon mit einem Admin-Account gestartet werden, daraus kann man andere Programme dann so "elevieren".
Beispiel:
CreateObject("Shell.Application").ShellExecute "C:\Program Files (x86)\Adobe\Acrobat DC\Acrobat\Acrobat.exe",,,"runas",1  

Ich möchte diesen Ansatz umsetzen:
Die UAC kannst du aus Sicherheitsgründen nicht fernsteuern, der Secure Desktop verhindert das. Starte das ganze stattdessen gleich elevated über einen "one time shot" scheduled task.
schtasks /? auf der Konsole eintippeln... Findest du hier im Forum haufenweise Infos zum Thema.

Btw. den fremden Thread hier für deine Zwecke zu entführen ist nicht gerade die feine Art.
Siehe Diskussionsrichtlinien:
Diskussionsrichtlinien - die Regeln zu unseren Inhalten

"Keine Takeovers. Versuche nicht, Beiträge anderer Autoren mit Ihren Fragen zu anderen Themen zu übernehmen. Eröffne lieber einen neuen eigenen Beitrag."
PeterleB
PeterleB 29.06.2020 um 18:12:48 Uhr
Goto Top
Sorry,

habe erst noch was Anderes zu tun (Haushaltspflichten) und eröffne dann eine neue Frage.

Gruß
Peter
144705
144705 29.06.2020 aktualisiert um 18:16:18 Uhr
Goto Top
Zitat von @PeterleB:
habe erst noch was Anderes zu tun (Haushaltspflichten) und eröffne dann eine neue Frage.
Bitte nicht, die ist überflüssig, die Antwort auf deine Frage findest du hier
Use the Windows Task Scheduler to run apps without UAC prompts and admin rights
Haben schon >1 Mio anderer User gefragt....
TomTomBon
TomTomBon 01.07.2020 um 11:56:16 Uhr
Goto Top
Moin Latavia,

Bitte kläre dann auch auf über die Risiken die der Scheduler bietet.

Ist das für eine Firmenumgebung ist es nicht empfehlenswert.

Wenn auch manchmal nicht anders lösbar.

Hintergrund:
Wenn Ich im Scheduled Tasks sage lasse z.B. %windir%\system32\notepad.exe als admin starten nach Logon.
Dann braucht ein findiger Anwender oder sonst etwas NUR die entsprechende obige Datei austauschen und die läuft dann nach den Einstellungen mit adminrechten...

Kann akzeptabel sein.
Muss man wissen.

Sicherer ist RunasRob
https://www.runasrob.com/
Dort wird verschlüsselt 1 Datei zum Adminstart erstellt.
Und diese Datei ist nicht tauschbar face-smile
Wenn getauscht ist der Schlüssel nicht nutzbar :-p

Aber nicht kostenfrei.

Nur mein Senf.
Thomas
144705
144705 01.07.2020 aktualisiert um 12:14:17 Uhr
Goto Top
Natürlich muss man den Ordner in dem solche Skripte u. d gl. liegen vor Veränderung durch Otto-Normalo schützen das ist klar.
Aber das Vorhaben des TO wie ich das sehe ist mangels Kenntnis von UAC & Co. zum Scheitern verurteilt.