Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Verknüpfungen erstellen

Mitglied: Tompazi

Tompazi (Level 1) - Jetzt verbinden

29.10.2007, aktualisiert 18.10.2012, 66831 Aufrufe, 73 Kommentare, 1 Danke

Wie erstelle ich mit einer Batch Datei Verknüpfungen?
eine Verknüpfung ht ja diese Endung *.lnk aber wie sage ich der Batch Datei wohin die Verknüpfung führen soll?

Danke Thomas
73 Antworten
Mitglied: schregi82
29.10.2007 um 20:55 Uhr
hi thomas,

das "problem" hatte ich neulich auch, scau mal unter
http://www.wer-weiss-was.de/theme9/article3146278.html

wenn du noch fragen hast ..
Bitte warten ..
Mitglied: bastla
29.10.2007 um 21:27 Uhr
... und wenn's tatsächlich vorrangig über Batch laufen soll, musst Du gar nicht so in die Ferne schweifen : (batch)(vbs) ShortCut Ziel und Befehl

Grüße
bastla
Bitte warten ..
Mitglied: bastla
29.10.2007 um 22:08 Uhr
Hallo Tompazi!

Da sich die im verlinkten Thread dargestellte Variante noch etwas straffen ließ, hier eine aktualisierte (und etwas kommentierte Fassung):
01.
@echo off & setlocal
02.

03.
::Speicherort der Verknüpfung (unterhalb von Startmenue\Programme)
04.
set "zielpfad=%userprofile%\Startm~1\Programme\XXXXX"
05.
::Falls das Symbol auf den Desktop soll:
06.
::set "zielpfad=%userprofile%\Desktop"
07.

08.
::Name der Verknüpfung (ohne ".lnk")
09.
set "progtitel=XXXXXXX"
10.
::Speicherort der Programmdatei (wird auch für "Ausführen in:" verwendet)
11.
set "progdir=C:\Programme"
12.
set "progexe=XXXXXXXXX.exe"
13.
::Kommentar
14.
set "beschreibung=Erklärung eigentlich unnötig ..."
15.

16.
::Bei Bedarf Speicherordner der Verknüpfung erstellen (siehe oben "zielpfad"):
17.
if not exist "%zielpfad%" md "%zielpfad%"
18.

19.
::temporäres VBScript erzeugen ...
20.
echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs
21.
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
22.
echo objShortcut.TargetPath="%progdir%\%progexe%">>%temp%\MakeShortCut.vbs
23.
echo objShortcut.Description="%beschreibung%">>%temp%\MakeShortCut.vbs
24.
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
25.
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
26.

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

30.
::... und wieder löschen.
31.
del %temp%\MakeShortCut.vbs
Grüße
bastla

[Edit] Noch kleine Korrekturen vorgenommen (überzähliges " entfernt, fehlende :: hinzugefügt) [/Edit]
Bitte warten ..
Mitglied: 42687
20.03.2008 um 19:20 Uhr
was muss ich bei Progdir und progexe eintragen wenn das einen Verknüpfung zu einem Ordner sein soll?
danke
Bitte warten ..
Mitglied: bastla
20.03.2008 um 20:09 Uhr
Hallo Peter161!

Für "progdir" ist der Pfad zum Ordner anzugeben und bei "progexe" gar nix (also das Anführungszeichen sofort nach dem = platzieren).

Grüße
bastla
Bitte warten ..
Mitglied: 65445
21.05.2008 um 13:19 Uhr
Hallo zusammen,

ich hab mir nun nach obiger Erklärung eine Verknüpfung auf dem Desktop erstellt.
Dabei hätte ich aber gerne, dass ich ein Symbol automatisch zuweisen kann, also nicht per Rechtsklick auf die Verknüpfung -> Eigenschaften, usw.
Kann man das realisieren und wenn ja, wie?

Gruß Steffen
Bitte warten ..
Mitglied: bastla
21.05.2008 um 13:44 Uhr
Hallo gizmovetter und willkommen im Forum!

Füge vor der Zeile
01.
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
noch ein:
01.
echo objShortcut.IconLocation = "Pfad zu Deiner .exe-, .dll- oder .ico-Datei,0">>%temp%\MakeShortCut.vbs
Für den Pfad kannst/solltest Du natürlich auch eine Batch-Variable (etwa %iconpfad%) verwenden. Falls sich in der angegebenen Datei mehrere Icons befinden, kannst Du anstelle von 0 die Nummer des gewünschten Symbols (Zählung beginnt bei 0) angeben.

Grüße
bastla
Bitte warten ..
Mitglied: 65445
24.06.2008 um 14:42 Uhr
Hi bastla,

vielen Dank für die sehr schnelle Antwort.
Bin erst jetzt dazu gekommen, das ganze auszuprobieren. Ergebnis: Funktioniert prima!

Gruß Steffen
Bitte warten ..
Mitglied: evinben
12.03.2012 um 11:01 Uhr
Hallo miteinander!

1. wie kann im Batch das Expandieren der Umgebungsvariable (zu einem Pfad) verhindert werden? Zum besseren Verständnis:
Es soll in dem Skript bei der Ausgabe nicht der expandierte Pfad, sondern die Umgebungsvariable so wie sie ist 1:1 geschrieben werden - also "%UserProfile% anstatt "C:\Benutzer\Administrator".

(Wenn in dem Skript am Schluss eine Umgebungsvariable - z. B. objShortcut.TargetPath="%UserProfile%\wscript.exe" - steht, funktioniert es in diesem Zusammenhang problemlos).

2. Gibt es eine Möglichkeit beim Erstellen einer Verknüpfung zusätzlich die Option " Als Administrator ausführen" zu setzen?

Vielen Dank für Tipps/Anregungen
gruß evinben
Bitte warten ..
Mitglied: bastla
12.03.2012 um 11:14 Uhr
Hallo evinben!
wie kann im Batch das Expandieren der Umgebungsvariable (zu einem Pfad) verhindert werden?
echo %%UserProfile%%
Grüße
bastla
Bitte warten ..
Mitglied: evinben
12.03.2012 um 11:21 Uhr
;), ;)

Du kannst echt gut den Montag zu einem Schontag machen! Fleißig & erfahren!

Dankeee!

gruß
evinben
Bitte warten ..
Mitglied: evinben
12.03.2012 um 11:49 Uhr
Hallo bastla!

allerdings beim Aufruf einer Batch mit CALL wird die Variable weiterhin expandiert - also so:

01.
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%%Userprofile%%" "ArgZwei" "ArgDrei"
kommt folgendes raus:
01.
echo "C:\Benutzer\Administrator" "ArgZwei" "ArgDrei"
Gibt es dafür eine Abhilfe?

Danke schön!

gruß
evinben
Bitte warten ..
Mitglied: bastla
12.03.2012 um 12:01 Uhr
Hallo evinben!

Wie wäre es mit
call "Probe mit Übegabe einer Umgebungsvariable 1zu1".bat" "%%%%Userprofile%%%%" "ArgZwei" "ArgDrei"
- kosten ja fast nix, die Prozentzeichen ...

Grüße
bastla

P.S.: Wo kaufst Du denn die Namen Deiner Batches - und haben die nix mit ohne Leer- und Sonderzeichen?
Bitte warten ..
Mitglied: evinben
12.03.2012 um 12:43 Uhr
ops... tatsächlich, ein Anführungszeichen hat sich hineingeschliechen > korrektur erfolgt - danke!


mit 3x % habe ich schon mal probiert, aber auf 4x % bin ich nicht auf die Idee gekommen .

ich werde es gleich ausprobieren...

Danke
evinben
Bitte warten ..
Mitglied: evinben
12.03.2012 um 12:47 Uhr
ne, es funktioniert noch nicht. So habe ich es eingetragen:

01.
set "TargetFile=%%%%windir%%%%\System32\wscript.exe"
02.
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%TargetFile%"
ist es richtig?

danke...
evinben
Bitte warten ..
Mitglied: bastla
12.03.2012 um 13:20 Uhr
Hallo evinben!
ist es richtig?
Das fragst Du mich? Eigentlich solltest Du derjenige sein, der testet (und ev Fehlermeldungen sieht) - obwohl ich eigentlich keinen Grund sehe, warum das nicht funktionieren sollte ...

Falls Dir übrigens 4 Prozentzeichen nicht genügen, nimm doch 8 davon ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
12.03.2012 um 13:57 Uhr
...leider nicht. Mit sehr vielen Varianten habe ich experimentiert.

Dann muss ich eventuell alles auf VBS umstellen und hoffen, dass es dann gehen würde.

gruß
evinben
Bitte warten ..
Mitglied: bastla
12.03.2012 um 14:58 Uhr
Hallo evinben!

Um mich zu korrigieren: Inzwischen hätte ich doch noch einen Grund gesehen (oder genauer: am Anfang Deiner ersten Zeile nicht gesehen ), warum das nicht funktioniert ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
12.03.2012 um 15:33 Uhr
Hallo bastla,

danke für den Korrekturhinweis nochmal: den fehlenden Befehl "SET" habe ich hier soeben nachgereicht, er war allerdings in der Batch-Datei, während ich alle möglichen Variante ausprobiert habe.
Ich habe auch ohne Anführungszeichen bei SET ausprobiert - so:

01.
set TargetFile=%%%%windir%%%%\System32\wscript.exe
02.
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%TargetFile%"
leider kein positives Ergebnis.
Wüsstest du eventuell eine Antwort auf meine zweite Frage?
(2. Gibt es eine Möglichkeit beim Erstellen einer Verknüpfung zusätzlich die Option " Als Administrator ausführen" zu setzen?)

Ich kämpfe noch...

gruß
evinben
Bitte warten ..
Mitglied: bastla
12.03.2012 um 19:22 Uhr
Hallo evinben!

Bei meinem Test hatte ich kein Problem mit der Übergabe:
D:\>type Aufruf.cmd
setlocal
set TargetFile=%%%%windir%%%%\System32\wscript.exe
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%TargetFile%"

D:\>type "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat"
echo %1
D:\>aufruf

D:\>setlocal

D:\>set TargetFile=%%windir%%\System32\wscript.exe

D:\>call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat" "%%windir%%\S
ystem32\wscript.exe"

D:\>echo "%windir%\System32\wscript.exe"
"%windir%\System32\wscript.exe"
Zur Frage 2 habe ich leider (derzeit) keine Idee ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
13.03.2012 um 18:12 Uhr
Hallo Bastla,

danke für den Hinweis! Folgend sind meine Erkenntnisse:

Du hast Recht, es funktioniert, !nur! solange die Batch-Datei direkt aufgerufen wird. Wenn diese über eine Verknüpfung erfolgt, dann expandiert die Variable auf dem Weg zur Batchdatei leider zu einem vollständigen Pfad.

01.
:Bei Aufruf einer Batch-Datei über Verknüpfung wird die Variable expandiert
02.
set TargetFile=%%%%windir%%%%\System32\wscript.exe 
03.
call "Probe mit Übergabe einer Umgebungsvariable 1zu1.bat.lnk" "%TargetFile%" 
Und die Antwort wäre dann: C:\Windows\System32\wscript.exe


Wenn es irgendwie zu schaffen wäre das Expandieren der Umgebungsvariable zu unterdrücken, dann ist das Problem gelöst, da das temporärausgegebene VB-Skript - mit dem Variablenpfad - die Verknüpfung wie gewollt erstellt:
01.
objShortcut.TargetPath="%windir%\System32\wscript.exe"
Und das Ergebnis in der Eigenschaften der Verknüpfung wäre dann 1:1: %windir%\System32\wscript.exe


Meine Mühen die Dateien über Verknüpfungen zu verwalten sind hoffentlich nicht umsonst.
Ich habe in der Hilfe von cmd /? nachgelesen - die Option setlocal enabledelayedexpansion bezieht sich doch nur auf FOR-Schleifen, die mir einbisschen Hoffnung gemach hat.

Wenn euch etwas einfällt, her damit.

gruß
evinben
Bitte warten ..
Mitglied: bastla
13.03.2012 um 19:34 Uhr
Hallo evinben!

Nun müsste mir erst einmal ein Grund einfallen, aus einem Batch einen anderen Batch über dessen Verknüpfung aufzurufen - aber sollte es wirklich so weit kommen, würde ich im aufgerufenen Batch einfach die vorher gesetzte Variable (hier also %TargetFile%) verwenden (und die dann überzählig gewordenen Prozentzeichen für ganz schlechte Zeiten aufbewahren ) ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
13.03.2012 um 22:10 Uhr
...

Nun müsste mir erst einmal ein Grund einfallen, aus einem Batch einen anderen Batch über dessen Verknüpfung aufzurufen
Es ist flexibler. Die Verknüpfungen können/dürfen verschoben werden. Die Verzeichnisstruktur wird/darf stets optimiert werden - mit der Zeit entstehen viele Änderungen. Die Anpassung der Zielpfade, die durch Änderungen der Verzeichnisstruktur durch den Benutzer ebenso aktualisiert werden müssen, übernimmt dann Windows im Hintergrund automatisch (Z. B. der Windows-Dienst TrkWks zum Überwachen verteilter Verknüpfungen auf Netzwerkebene aktualisiert die Zielpfade).
Viele andere Anwender arbeiten gerne mit Batch-Schablonen. Werden zu der jeweiligen Schablone Verknüpfungen an verschiedene Verzeichnisse verteilt, kann von da aus immer auf sie zugegriffen werden, obwohl die Verzeichnisstruktur im Laufe der Zeit mehrmals verändert wurde.
Mit den Verknüpfung ist es nicht so ganz rosa – oft gehen die Beziehung doch verloren – dennoch meiner Erfahrung nach sehe ich es als günstiger auf Verknüpfungen zuzugreifen, als direkt auf die jeweilige Datei, da die Verzeichnisstruktur sich sehr intensiv ändert. Nue Umgebungsvariablen zu erstellen, ist eine sichere Lösung. Ich muss noch in der Hinsicht an Erfahrung sammeln.
würde ich im aufgerufenen Batch einfach die vorher gesetzte Variable (hier also %TargetFile%) verwenden
Wenn ich in dem aufgerufenen Batch die Variable setze, dann ist sie keine Schablone mehr. Mehrere separate Dateien müssen erstellt werden. Jede neue Idee, jede Änderung müssen dann auf allen Dateien vorgenommen werden. Die Entwicklung ist träge. Und der Hauptvorteil, den ich in den Verknüpfungen sehe, ist deren weitestgehend automatische Aktualisierung.
Da in der Praxis doch öfter passiert, dass die Beziehungen der Verknüpfungen doch verloren gehen, könnten hier benutzerdefinierte Umgebungsvariablen Abhilfe schaffen. Allerdings ist der Datenträger auf den anderen Rechnern nicht einsatzfähig.
Im Grunde genommen, habe ich bisher global gesehen mit der verfolgten Strategie eher positive Ergebnisse gesammelt - es wird besser, robuster.
Was würdet ihr dazu sagen, wie ist eure Erfahrung in der Hinsicht? Gerne bin ich für Tipps und Hinweise offen.

Gruß
evinben
Bitte warten ..
Mitglied: bastla
13.03.2012 um 22:21 Uhr
Hallo evinben!
Wenn ich in dem aufgerufenen Batch die Variable setze, dann ist sie keine Schablone mehr.
Verstehe ich nicht - ich kann doch einfach beide Varianten (bestehende Variable, Parameterübergabe) verwenden:
01.
if not defined TargetPath (
02.
    if #%~1#==## echo Kein TargetPath angegeben & goto :eof
03.
    set "TargetPath=%~1"
04.
)
Grüße
bastla
Bitte warten ..
Mitglied: evinben
13.03.2012 um 23:16 Uhr
Hallo Bastla!

;), du meist also so, wie es momentan in der Schablone steht:

01.
:Fehlermeldung ausgeben, falls es versucht wird diese Batch-Datei ohne Argumente auszuführen
02.
set ArgumentAbfrage=%1
03.
if not defined ArgumentAbfrage echo Diese Batch-Datei kann nur mit Argumenten ausgeführt werden: z. B: & echo. & echo start "%~dpnx0" "Name der Verknüpfung" "Verzeichnis der Verknüpfung" "Zielpfad" & pause >nul
Was ändert das alles eigentlich an der Tatsache, dass die Umgebungsvariable, die mit dem ersten Argument (anhand CALL „Verknüpfung zum Batch.lnk“) übergeben wird, expandiert wird?
Ich verstehe nicht so ganz was damit erreicht werden kann, außer einem versehentlichen Aufruf des Batches ohne Argumente zu verhindern?


Gruß
evinben
Bitte warten ..
Mitglied: bastla
13.03.2012 um 23:22 Uhr
Hallo evinben!
Ich verstehe nicht so ganz was damit erreicht werden kann, außer einem versehentlichen Aufruf des Batches ohne Argumente zu verhindern?
Wenn Du den Aufruf von einem Batch aus vornimmst, kannst Du bereits im aufrufenden Batch die Variable setzen - der aufgerufene Batch "erbt" diese dann, sodass eine Parameterübergabe gar nicht nötig ist. Wenn es dennoch die Option dazu geben soll, kannst Du ja durch geeignete Abfragen ("Wenn Parameter, dann diesen verwenden" oder, wie in meinem Beispiel oben, "Wenn Variable bereits gesetzt, dann diese verwenden, ansonsten Parameter") steuern, was gelten soll ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
13.03.2012 um 23:48 Uhr
Ohh mannn ihr alte Hasen !!!

endlich begriffen! Ich dachte mir die ganze Zeit, dass ein Argument via %~x zwingend erforderlich wäre. Bei mir hat das rote Lämpchen parallel zu deinem Schreiben aufgeleuchtet, dank deinem indirekten Tipp. Nun wollte ich gleich es schreiben, dass ich es verstanden habe, aber hast mich etwas überhohlt gehabt.
So lange hast du mich also quellen lassen …

Bastla - alles läuft bestens und die Verknüpfung wird mit der Variable 1:1 erstellt.

PS: es wären dann allerdings nur 2x % erforderlich (also set TargetFile=%%windir%%\System32\wscript.exe)

Nun bleibt noch das Ziel der Verknüpfung via VBS-Umweg inkl. den Umlauten auszulesen und das spannende Projekt "Verknüpfungen" ist zumindest soweit abgeschlossen.
Ich habe jedenfalls vieles dabei gelernt.

Gruß
evinben
Bitte warten ..
Mitglied: bastla
13.03.2012 um 23:52 Uhr
Hallo evinben!
PS: es wären dann allerdings nur 2x % erforderlich (also set TargetFile=%%windir%%\System32\wscript.exe)
... und somit könntest Du die dann überzählig gewordenen Prozentzeichen für ganz schlechte Zeiten aufbewahren ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
13.03.2012 um 23:57 Uhr
aaa jaaa...
deine Rätsel sind mir etwas zu tief, aber es wird besser

evinben
Bitte warten ..
Mitglied: evinben
03.04.2012 um 01:13 Uhr
Hallo bastla,

ich brauche deine Hilfe:

In der Verknüpfung soll exakt folgender Pfad eingebaut werden, damit sie fehlerfrei funktioniert:
%windir%\System32\runas.exe /user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""

Wenn ich allerdings in dem Code zur Erstellung einer Verknüpfung unter Parameter (Arguments) in dem Pfad die beiden Rückwärtsschrägstriche einfüge, dann meldet mir das VB-Skript jeweils beim Ausführen einen Fehler. So sieht das Skript momentan aus:
01.
Set objShell=WScript.CreateObject("Wscript.Shell")
02.
Set objShortcut=objShell.CreateShortcut("%AppData%\Install\RegJump als Administrator.lnk")
03.
objShortcut.TargetPath="%windir%\System32\runas.exe"
04.
objShortcut.Arguments=/user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""
05.
objShortcut.IconLocation="C:\Windows\regedit.exe,0"
06.
objShortcut.Save
Ich habe viele Varianten/Kombinationen ausprobiert aber leider alles ohne Erfolg. Sollen die Schrägstriche escaped werden und wie genau sollte es in VB geschehen?
Gibt es eventuell eine Möglichkeit eine fertige Verknüpfung auszulesen und die korrekte Schreibweise der Parameterzeile, die in VB-Skript eingegeben werden soll, zu erfahren?
Vielen Dank

Gruß
evinben
Bitte warten ..
Mitglied: bastla
03.04.2012 um 02:04 Uhr
Hallo evinben!

Anführungszeichen werden in VB durch Verdoppelung "escaped", sodass das syntaktisch etwa so aussehen sollte:
01.
Set objShell=WScript.CreateObject("WScript.Shell")
02.
Set objShortcut=objShell.CreateShortcut(objShell.ExpandEnvironmentStrings("%AppData%")&"\Install\RegJump als Administrator.lnk")
03.
objShortcut.TargetPath="%windir%\System32\runas.exe"
04.
objShortcut.Arguments="/user:Administrator /savecred %windir%\System32\wscript.exe ""%AppData%\Install\RegJump als Administrator.vbs"""
05.
objShortcut.IconLocation="%windir%\regedit.exe,0"
06.
objShortcut.Save
wobei noch anzumerken wäre, dass der Ordner "%AppData%\Install" bereits existieren (oder eben vom Script erstellt werden) muss ...
Bist Du übrigens sicher, dass Du "/savecred" verwenden willst?

Grüße
bastla

P.S.: Wenn
%windir%\System32\runas.exe
keine Anführungszeichen braucht, sollten sie auch für
%windir%\System32\wscript.exe
nicht erforderlich sein ...
Bitte warten ..
Mitglied: 106009
03.04.2012 um 02:18 Uhr
Hallo,

Bist Du übrigens sicher, dass Du "/savecred" verwenden willst?

Vielleicht kennt er das Tool nicht? Die verschlüsselte Verknüpfung, die damit erstellt werden kann, enthält das Passwort, ohne dass das eingegeben werden muss oder ausgelesen werden kann.
http://www.pcwelt.de/downloads/pcwRunAs-1215998.html

Gruß
Bitte warten ..
Mitglied: evinben
03.04.2012, aktualisiert 23.09.2017
Hallo bastla,
und ollidolli

genauso wie du es vorgeschlagen hast bastla, habe ich gestern einige Male probiert. Wie ich es oben geschrieben habe , muss der Pfad in der Eigenschaften der Verknüpfung unter Ziel letztendlich so 1:1 aussehen:

%windir%\System32\runas.exe /user:Administrator /savecred "%windir%\System32\wscript.exe \"%AppData%\Install\RegJump als Administrator.vbs\""

D. h. ohne die beiden Rückwärts-Schrägstriche (Backslash) wird es nichts – sie stellen hier das Hauptproblem, so dass das Skript nicht richtig ausgeführt werden kann.

wobei noch anzumerken wäre, dass der Ordner "%AppData%\Install" bereits existieren (oder eben vom Script erstellt werden) muss ...
Ja, dafür wurde gesorgt: der Ordner wird bei Bedarf von dem übergeordneten Batch, der das Skript ausführt, erstellt (im Vergleich zu VB kenne ich mich in Batch noch deutlich besser aus)
Bist Du übrigens sicher, dass Du "/savecred" verwenden willst?
Puuhhh, ich hoffe sehr die Gefahren erhöhen sich somit nicht, da das Benutzer-Passwort vom Anfang an in der Registry ja sowieso verschlüsselt gelagert wird und das Tool RunAs mit dem Schalter /savecred für jeweilige Datei nur einen Stempel erstellt, mit dem er sich merkt, welche Dateien ohne erneuten Passwortabfrage direkt ausgeführt werden dürfen. Das wäre zumindest meine Logik. RunAs speichert in dem Sinne keine Passwörter!? Es wäre ja sicherheitstechnisch etwas schwächer, da mehr Potential zum Knacken anbieten würde.
Eine Verknüpfung mit dem Schalter „/savecred“ wird nur den erlaubten Benutzern erstellt. Ich muss natürlich sehr aufpassen, dass die restlichen Benutzer keine Verknüpfungen versehentlich mit dem Schalter /savecred erhalten bzw. vielleicht gar keine. Am besten erstellt ich dann eine txt-Datei, in welcher die Benutzer mit erhöhten Rechten einzutragen wären, mit einer for /f Schleife die txt-Datei zeilenweise ablesen und nur für die vorhandenen Benutzern den Schalter /savecred automatisch einbauen lassen.
Über eine Äußerung und eventuelle Hinweise eurer Bedenken, hinsichtlich dem Schalter /savecred, würde ich mich sehr freuen.

Ah so @106009, ich bin da mittlerweile ein Windows-Bordmittel-Fanatiker geworden und fahre mit dieser Strategie ziemlich gut und immer noch begeistert zufrieden – vor allem bin ich sehr flexibel. Solche CHIP-Tools in meinen früheren Jahren haben die Registry oft so fahrlässig verstellt, dass ich im Schock bis heute bin (Systemwiederherstellung hat nicht geholfen, da einige Probleme zu spät lokalisiert worden sind). Ich habe ein Trauma davon – ich bin traumatisiert . Nun habe ich gelernt, dass ein bewusster Umgang beim Werkeln im System und einer Auseinandersetzung in der Funktion einzelner Schritten und Zusammenhängen nicht schadet . Klar investiert man da viel an Zeit, aber ehrlich ich möchte das Wissen !in meiner Tätigkeit! nicht mehr missen.
Danke schön für den Tipp. Vielleicht siehst du in meiner Erfahrung und Meinung Kontra-Punkte, dann natürlich diese gerne äußern – ich bleibe weiterhin offen - wobei klare Argumenten wären hier entscheidend.

Gruß
evinben
Bitte warten ..
Mitglied: 106009
03.04.2012 um 11:09 Uhr
Zitat von evinben:
Solche CHIP-Tools .....
Die mag ich auch nicht. Aber das ist kein Chip-Tool, sondern eines der PC-Welt, von dem auch irgendwann mal die Sourcen veröffentlicht wurden.

Nun habe ich gelernt, dass ein bewusster Umgang beim Werkeln im System und einer Auseinandersetzung in der Funktion einzelner
Schritten und Zusammenhängen schadet nicht.
Sicher nicht, wenn man weiß, wie man damit richtig umgehen muss.

Der Parameter /savecred bei runas merkt sich nach einmaliger Eingabe das Passwort für den Administrator und ermöglich so jede weitere Verwendung von runas ohne erneute Nachfrage/Eingabe für jeden damit verwendeten Parameter! Wenn das in deinem Sinne sein sollte, kannst du das so einsetzen.

Bei einer mit pcwRunas erstellten Verknüpfung funktioniert das nur und ausschließlich für das als Parameter eingetragene Programm und auch nur mit der Programmversion, die auch beim Erstellen der Verknüpfung aktuell war.

Gruß
Bitte warten ..
Mitglied: bastla
03.04.2012 um 12:54 Uhr
Hallo evinben!

Naja, wenn Du die Backslashes haben willst (ich habe die Verknüpfung nicht getestet, würde aber dennoch annehmen, dass sie überflüssig sind):
objShortcut.Arguments="/user:Administrator /savecred ""%windir%\System32\wscript.exe \""%AppData%\Install\RegJump als Administrator.vbs\"""""
Grüße
bastla
Bitte warten ..
Mitglied: 3xplor3r
16.04.2012 um 11:59 Uhr
Hallo,

ich habe das Script mal übernommen und angepasst, funktioniert auch tadellos, wäre da nicht noch eine Sache.

objShortcut.TargetPath fügt nun den Zielpfad zum Programm der Verknüpfung hinzu. Jetzt möchte ich aber zusätzlich noch Parameter übergeben, die die Programmausführung steuern. Nun werden diese Parameter leider mit in Anführungszeichen gesetzt, wodurch der Programmpfad ungültig wird.

Wie kriege ich es hin, dass die gesamte Anweisung (objShortcut.TargetPath) die Variable %progdir% ohne Anführungszeichen in die Verknüpfung schreibt? Oder wie kriege ich es hin, dass nur für die Variable %progdir% Anführungszeichen gesetzt werden, für alles Weitere, für die Parameter habe ich eigene Variablen definiert, keine Anführungszeichen.
Bitte warten ..
Mitglied: bastla
16.04.2012 um 12:42 Uhr
Hallo 3xplor3r!

Parameter gehören ja auch nicht in den "TargetPath", sondern sind als "Arguments" zu übergeben ...

Grüße
bastla
Bitte warten ..
Mitglied: evinben
19.04.2012 um 13:40 Uhr
Hallo!
hier bin ich wieder bei euch .

Hallo ollidolli,

danke dir!
Die mag ich auch nicht. Aber das ist kein Chip-Tool, sondern eines der PC-Welt…
Ops… dann muss ich mich wohl wegen meines Vorurteils entschuldigen und werde nach deiner Empfehlung bei Gelegenheit eventuell das Tool ausprobieren.

Sicher nicht, wenn man weiß, wie man damit richtig umgehen muss.
Entschuldigung, den Sinn deines Satzes verstehe ich nicht. Wie meinst du es genau?

… und ermöglich so jede weitere Verwendung von runas ohne erneute Nachfrage/Eingabe für jeden damit verwendeten Parameter!
Vielen Dank für den Hinweis. Ich habe runas-Verknüpfung auf demselben Rechner aber mit einem anderen Benutzerkonto ausprobiert. Das Passwort wird doch für jeden Benutzer abgefragt. Also das Abspeichern des Passworts erfolgt nicht global für das ganze System – nicht „für jeden“.
Die Passwörter können bei Bedarf im „Tresor“ gelöscht werden, falls jemand es rückgängig machen möchte. Allerdings gebe ich dir völlig Recht, dass ein Admin unter einem anderen Benutzerkonto eine Datei über die bestehenden Verknüpfung mit runas /savecred ebenso mal irgendwann ausführen möchte und in der Vergessenheit mal schnell sein Passwort, das dann leider permanent gespeichert wird, angibt. Der Misst ist dadurch schnell geschehen…

Hallo bastla,

ich werde es gleich versuchen und dann berichten.
Bitte warten ..
Mitglied: 106009
19.04.2012 um 17:31 Uhr
Hallo,

Zitat von evinben:
Entschuldigung, den Sinn deines Satzes verstehe ich nicht. Wie meinst du es genau?

Das steht in den 2 Sätzen dahinter.

Gruß
Bitte warten ..
Mitglied: evinben
21.04.2012 um 19:10 Uhr
Hallo bastla!

Naja, wenn Du die Backslashes haben willst (ich habe die Verknüpfung nicht getestet, würde aber dennoch annehmen, dass sie überflüssig sind):


Vielen Dank! Die Verknüpfung wird erstellt und sie funktioniert mit der von dir zuletzt mitgeteilten Syntax endlich! Mit deiner vorherigen Syntax (ohne die Rückwährts-Schrägstriche) geht es definitiv nicht.


Ein großes Problem habe ich noch. Wenn ich einen HKCU-Registry-Zweig mit runas.exe lade, dann lande ich zwar in dem HKCU-Zweig aber zwangsweise des Benutzers Administrator, obwohl ich den Schalter /env (behält die aktuelle Umgebung, anstatt diejenige des angegebenen Benutzers) verwende. Sehr enttäuschend.
Es geht ja darum nicht etwas zwingend mit dem Benutzer Administrator zu starten, sondern hauptsächlich mit erhöhten „administrativen“ Rechten zu starten, und zwar so als ob die Kontensteuerungsabfrage bestätigt wäre (also genau so wie mit "Als Administrator ausführen" über das kontextmenü der rechten Maustaste). Nur dann können bestimmte REG-Schlüssel geändert werden, ohne der Bastelei die Berechtigungen für jeden Schlüssel jeweils verändern zu müssen.
Wir sind zwar aus dem Weg des Themas „Verknüpfung erstellten“ einiges weggerutscht, ich finde es passt noch etwas dazu, ansonsten eröffne ich einen neuen Beitrag, falls es sein muss.

Gruß ollidolli!

danke dir - ja, jetzt habe ich es verstanden

Gruß
evinben
Bitte warten ..
Mitglied: bastla
21.04.2012 um 19:14 Uhr
Hallo evinben!
ansonsten eröffne ich einen neuen Beitrag, falls es sein muss.
Empfehlen würde ich es jedenfalls ...

Grüße
bastla
Bitte warten ..
Mitglied: 106009
21.04.2012 um 19:30 Uhr
Hi,

Zitat von evinben:
Ein großes Problem habe ich noch. Wenn ich einen HKCU-Registry-Zweig mit runas.exe lade, dann lande ich zwar in dem
HKCU-Zweig aber zwangsweise des Benutzers Administrator, obwohl ich den Schalter /env (behält die aktuelle
Umgebung, anstatt diejenige des angegebenen Benutzers
) verwende. Sehr enttäuschend.

Nee, korrekt. Umgebung ist das Environment mit den Umgebungsvariablen.

Im HKU-Zweig findest du auch unter dem entsprechenden SID den Zweig des auch angemeldeten Benutzers, aus dessen Kontext du runas aufgerufen hast.
Und da kannst du deine Änderungen vornehmen.

Gruß
Bitte warten ..
Mitglied: sugram
24.04.2012 um 07:26 Uhr
Hallo


Ich hätte dazu eine Frage.
In meiner Verknüpfung muß hinter der exe noch ein -vx.x.x.x

Ich habe schon mit den " " rumexperimentiert, leider bisher ohne Erfolg.
Endweder fehlt dann der Zusatz -v, oder der Shortcut wird nicht erstellt, weil beim erstellen eine Fehlermeldung in der Batch kommt.


Danke schon mal

Gruß sugram
Bitte warten ..
Mitglied: bastla
24.04.2012, aktualisiert 18.10.2012
Hallo sugram!

Da damit ein zu übergebender Parameter gemeint sein dürfte: https://www.administrator.de/forum/verkn%c3%bcpfungen-erstellen-72240.ht ...

Im übrigen wäre eine konkrete Beschreibung (des Batches und der Fehlermeldung) hilfreich ...

Grüße
bastla
Bitte warten ..
Mitglied: sugram
24.04.2012 um 09:36 Uhr
Hallo bastla!

Da hast du vollkommen recht ... funktioniert nun einwandfrei
Ich dachte ich müßte den Parameer irgendwie bei set "progexe= ..... einbauen.
Daher hat das dann nicht funktioniert.

VIELEN Dank!!


Gruß
sugram
Bitte warten ..
Mitglied: Ertgtct
04.02.2013 um 10:54 Uhr
ok, hat auch mir geholfen, aber wie kann ich ein .exe mit zusätzlichen Parametern wie "-game" starten?
Bitte warten ..
Mitglied: evinben
04.02.2013 um 11:32 Uhr
Hallo Ertgtct,

einfach so wie oben eine Verknüpfung entweder per Batch, VBS oder einfach manuell erstellen und die notwendigen Parameter eintragen.
Bzw. schreib uns, was dir nicht genau klar ist.

Gruß
evinben
Bitte warten ..
Mitglied: Ertgtct
04.02.2013, aktualisiert um 17:24 Uhr
Hallo evinben,

ich hab einfach keine Ahnung wo ich in den VBS teil der batch-Datei die Parameter , hier in meinen Fall " -game ..." eintragen soll, mit dem die .exe gestartet wird, damit sie auf die Ressourcen eines anderen Ordners zugreifen kann (der Teil ist jetzt hier nicht wichtig).
Ich möchte die Datei nähmlich als .exe kompilieren, damit sie das für andere alleine tut. Aber sonst funktioniert alles prima =)
Bitte warten ..
Mitglied: Ertgtct
04.02.2013 um 14:34 Uhr
und danke für die schnelle Antwort ;)
Bitte warten ..
Mitglied: Ertgtct
04.02.2013, aktualisiert um 17:23 Uhr
Nein sorry, war eine falsche Verknüpfung
Bitte warten ..
Mitglied: DerKamiKatze
21.09.2017 um 09:52 Uhr
Hallo.

Dieses Script hat mir sehr geholfen und funktioniert Einwandfrei!
Eine Herausforderung habe ich da allerdings noch:

Ich möchte dass im "Ziel", also "TargetPath" vor dem "%progdir%\%progexe%" folgendes steht:
"C:\Windows\System32\runas.exe /savedcred /env /user:administrator"

Also zusammen soll es dann so aussehen:
C:\Windows\System32\runas.exe /savedcred /env /user:administrator "%progdir%\%progexe%"

Was ich bisher erfolglos versucht habe:
- manuell in die Zeile TargetPath meinen Wunschzusatz eingetragen
- alternativ zum C:\Windows den %windir% verwendet
- meinen Wunschzusatz als set "adminbefehl=C:\Windows\System32\runas.exe /savedcred /env /user:administrator " und anschließend bei TargetPath als %adminbefehl% vorne eingefügt

Ich verzweifle langsam....
Kann mir jemand dabei helfen?
Bitte warten ..
Mitglied: DerKamiKatze
21.09.2017 um 15:03 Uhr
Ich habe es nun selbst behoben bekommen.

Der Code sieht nun wie folgt aus:

01.
:: Dies erstellt eine Verknüpfung des Programms
02.
@echo off & setlocal
03.
set zielpfad=Zielpfad
04.
set progtitel=Programmname
05.
set progdir=Pfad zum Programmm
06.
set progexe=Programmname.exe
07.
set runas=%windir%\System32\runas.exe
08.
set savedcred=/savedcred /env /user:administrator ""%progdir%\%progexe%""
09.

10.
 >%temp%\MakeShortCut.vbs echo Set objShell=WScript.CreateObject("Wscript.Shell")>%temp%\MakeShortCut.vbs
11.
>>%temp%\MakeShortCut.vbs echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
12.
>>%temp%\MakeShortCut.vbs echo objShortcut.TargetPath="%runas%">>%temp%\MakeShortCut.vbs
13.
>>%temp%\MakeShortCut.vbs echo objShortcut.Arguments="%savedcred%">>%temp%\MakeShortCut.vbs
14.
>>%temp%\MakeShortCut.vbs echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
15.
>>%temp%\MakeShortCut.vbs echo objShortcut.IconLocation = "Pfad zum Programm\Programmname.exe,0">>%temp%\MakeShortCut.vbs
16.
>>%temp%\MakeShortCut.vbs echo objShortcut.Save>>%temp%\MakeShortCut.vbs
17.

18.
cscript //nologo %temp%\MakeShortCut.vbs
Und falls sich jemand fragen sollte, wozu das gut ist:

Wenn man an einem PC ohne Adminrechte arbeitet, hat man ggf. Probleme damit, Programme auszuführen die Adminrechte benötigen.
Die auf die Art angelegte Verknüpfung wird unter dem Adminaccount ausgeführt, ohne dass der User das Passwort eingeben muss.
Bitte warten ..
Mitglied: evinben
23.09.2017 um 11:00 Uhr
seltsam, dass ich keine Benachrichtigungen über neue Kommentare vom ADMINISTRATOR-Forum erhalten habe, sonst hätte ich gerne dem Mitglied Ertgtct noch damals auf seine Frage vom 04.02.2013 geantwortet.

Auch keine Benachrichtigung über die neue Frage (über den Kommentar) von DerKamiKatze vom 21.09.2017 habe ich erhalten, was darauf hindeutet, dass die Aussetzer im ADMINISTRATOR-Forum weiterhin vorhanden sind.
Erst heute um 9:55 Uhr ist eine Benachrichtigungs-E-Mail vom ADMINISTRATOR-Forum eingegangen.
Bitte warten ..
Mitglied: evinben
23.09.2017 um 11:07 Uhr
Hallo DerKamiKatze,

schön, dass du es alleine geschafft hast.
Wieso gibst du die temporäre VBS.Datei sowohl am Anfang als auch am Ende jeder Zeile an?

01.
>>%temp%\MakeShortCut.vbs echo objShortcut.Save>>%temp%\MakeShortCut.vbs 
Üblich wäre nur am Ende
01.
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
oder nur am Anfang
01.
>>%temp%\MakeShortCut.vbs echo objShortcut.Save
Und mit
01.
del "%temp%\MakeShortCut.vbs"
lässt sich die temporär erstellte Datei löschen, was das Ganze etwas sauberer macht.

Gruß
evinben
Bitte warten ..
Mitglied: DerKamiKatze
13.11.2018 um 16:23 Uhr
Aloha zusammen.

Danke @evinben - die Tipps zum Aufräumen habe ich beherzigt und erfolgreich angewendet!
Nun stehe ich vor einem neuen Problem, welches ich bisher nicht lösen konnte... :

Es steht eine firmeninterne Systemumstellung an, welche den bisher genutzten Pfad ändert - das an sich ist okay, ABER der neue Pfad enthält einen Umlaut... In meinem Fall ein "ü".

Alle Versuche, den Umlaut umzuwandeln, funktionierten zwar innerhalb der Batch-Datei, jedoch nicht im vbs script... Bedeutet dass der unter "progdir" angelegte Pfad später in der Verknüpfung unter "Ziel" bzw. "Ausführen in" unsauber dargestellt wird.. Konkret wird das "ü" einfach nicht geschrieben.

Hat jemand eine Idee?
Kann ja nix schweres sein... Aber für heute bin ich durch mit meinem Latein.

Vielen Dank vorab!
Bitte warten ..
Mitglied: evinben
13.11.2018, aktualisiert um 17:19 Uhr
Hallo @DerKamiKatze,

anbei eine Hilfe als Batch-Skript (rein als Beispiel) und solltest du analytisch doch nicht zurecht kommen, melde dich gerne erneut:

01.
:Ziel der Verknüpfung erfahren
02.
:~~~~~~~~~~~~~~~~~~~~~~~~~
03.

04.
@echo off
05.
setlocal enabledelayedexpansion 
06.
setlocal
07.
@prompt -$G
08.
chcp 1252 >nul
09.

10.
PushD %~dp0
11.

12.

13.
:Ziel der Verknüpfung abfragen, um die Verknüpfungsdatei/den Verknüpfungsordner zu kopieren
14.
:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
15.
:Verknüpfung eingeben
16.
set "LinkFile=Den Namen einer Datei (ohne Erweiterung) erhalten.bat (z. B. für den Namen einer Verknüpfung).lnk" 
17.

18.
:Über das temporär erzeugte VBS-Skript das Ziel der Verknüpfung abfragen
19.
set "TempVBSkriptFile=%temp%\GetTargetPath.vbs" 
20.
>%TempVBSkriptFile% echo WScript.Echo CreateObject("WScript.Shell").CreateShortcut(WScript.Arguments(0)).TargetPath 
21.
for /f "delims=" %%i in ('cscript //nologo "%TempVBSkriptFile%" "%LinkFile%"') do set File=%%~nxi& set FileDirectory=%%~dpi& set TargetPath=%%~i
22.

23.
goto :M1
24.
:Umlauten durch ASCII Zeichen ersetzen 
25.
:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
26.
:Da der Pfad vom VBS-Skript in ANSI-Zeichen ausgegeben wird, kann er wegen den Umlauten von den (meisten) Befehlen nicht verarbeitet werden.
27.
:Vor dem Fortsetzen müssen alle Umlauten in der Zeichenfolge durch ASCII-Zeichen ersetzt werden.    
28.
set NoUmlaut=%1
29.
set NoUmlaut=%NoUmlaut:Ž=Ä%
30.
set NoUmlaut=%NoUmlaut:„=ä%
31.
set NoUmlaut=%NoUmlaut:™=Ö%
32.
set NoUmlaut=%NoUmlaut:”=ö%
33.
set NoUmlaut=%NoUmlaut:=ü%
34.
set NoUmlaut=%NoUmlaut:š=Ü%
35.
set NoUmlaut=%NoUmlaut:á=ß%
36.
goto :eof
37.
:~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
38.

39.
:M1 
40.
:Umlauten im Zielpfad ersetzen:
41.
echo.
42.
call :Umlauten "%File%"
43.
set File=%NoUmlaut%
44.
echo Datei:		%File%
45.
echo.
46.
call :Umlauten "%FileDirectory%"
47.
set FileDirectory=%NoUmlaut%
48.
echo Verzeichnis:	%FileDirectory%
49.
echo.
50.
call :Umlauten "%TargetPath%"
51.
set TargetPath=%NoUmlaut%
52.
echo Zielpfad:	%TargetPath%
53.

54.

55.
:echo %TargetPath%>tmp.txt
56.
pause >nul
Viel Erfolg!
Bitte warten ..
Mitglied: DerKamiKatze
13.11.2018 um 17:41 Uhr
Danke für deinen Beitrag.
Nur leider fühle ich mich nun unwissender als vorher

Ich weiß, dass VB Scripte kein UTF-8 verstehen bzw. schreiben können... So weit bin ich auch gekommen.
Aber ich verstehe nicht, wie man es schafft, dass die Umlaute auch korrekt geschrieben werden.
Die Auflistung des obigen Codes interpretiere ich so, dass man eine (temporäre?) Liste der benötigten Umlaute erstellt - aber das wird doch nichts daran ändern, dass beim schreiben der Umlaute in der Verknüpfung diese nicht oder falsch geschrieben werden - oder?

Da beim verwendeten Script mittels vbs geschrieben wird, würde ich drauf tippen, dass man am besten einfach erst die Verknüpfung erstellt.
In meinem Fall würde ich alle Umlaute mit Platzhaltern versehen - im Falle des "ü" z.B. "AAA". Anschließend könnte man per Batch in den Verknüpfungen ja jedes "AAA" durch ein "ü" ersetzen... Wäre das ein einfacher Ansatz? Das könnte man ja alles in derselben Batch-Datei zusammenpacken, oder?

Hab ich einen Denkfehler oder bin ich heute einfach nur doof? ... hmm
Bitte warten ..
Mitglied: evinben
14.11.2018 um 08:46 Uhr
Hallo @DerKamiKatze

Hab ich einen Denkfehler oder bin ich heute einfach nur doof?

Keiner ist doof nur weil er was fragt, was er nicht weiß. Zumindest fragt er , was schon mal sehr gut ist!!! Statt klug zu schauen ... und nichts zu fragen ...


DerKamiKatze sende uns einfach das Skript, wie es aktuell ist, und beschreibe das Vorhaben und das Problem Schritt für Schritt: was du alles machen möchtest und was nicht funktioniert, alles an einer Stelle. Dann wird es transparenter und dir wird es sicherlich schnell geholfen.

Bis bald
Bitte warten ..
Mitglied: DerKamiKatze
14.11.2018 um 11:54 Uhr
Guten Morgen.

Okay - über Nacht hat sich mein Fehler aufgelöst und die Ursache ist identifiziert: Wie so oft, ist es der Nutzer selbst (ich), der den Fehler verursachte...

Ich dachte mir gestern nämlich, dass es doch toll sei, wenn die Ausgabe der Anweisungen in der Batchdatei auch Umlaute wie z.B. "ü"anzeigen würde, anstatt dass ich "ue" schreibe... Also änderte ich die Codierung mit dem Befehl
01.
chcp 65001
zu UTF-8.

Das an sich funktionierte hervorragend und alle Umlaute wurden nun im Batch-Fenster angezeigt! Jedoch führte es dazu, dass das VB Script, welches UTF-8 ja nicht "versteht", dadurch beim Schreiben der Parameter in der Verknüpfung die Umlaute falsch angab, und die Verknüpfungen nicht funktionierten (Statt "ü" wurde "ü" geschrieben).

Die Lösung: Codierung zurück auf ANSI gesetzt und über den Schönheitsfehler hinweggesehen. Und ZACK - schon wird die Verknüpfung auch korrekt angegeben - denn wider erwarten schreibt das Script auch ein "ü" problemlos in die Verknüpfungseigenschaften.

Ich werde nachher mal einen anonymisiertes Codebeispiel einfügen, damit man das gesamte Ausmaß des Projekts klar wird

Dennoch ergibt sich daraus eine neue Frage: Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?
Bitte warten ..
Mitglied: DerKamiKatze
15.11.2018 um 14:45 Uhr
Aaalso - nun ist es soweit. Das Wunder ist vollbracht und funktioniert einwandfrei.
Der Code sieht wie folgt aus:

01.
:: Dies erstellt eine Verknuepfung des [PROGRAMMS] im [ORDNER]
02.
@echo off & setlocal
03.
set zielpfad=[ZIELPFAD]
04.
set progtitel=[NAME_DER_VERKNÜPFUNG]
05.
set progdir=[PFAD_DER_AUSZUFÜHRENDEN_.EXE_DATEI]
06.
set progexe=[NAME_DER_.EXE_DATEI].exe
07.
set runas=%windir%\System32\runas.exe
08.
set savecred=/savecred /env /user:administrator ""%progdir%\%progexe%""
09.

10.
echo Set objShell=WScript.CreateObject("Wscript.Shell")>>%temp%\MakeShortCut.vbs
11.
echo Set objShortcut=objShell.CreateShortcut("%zielpfad%\%progtitel%.lnk")>>%temp%\MakeShortCut.vbs
12.
echo objShortcut.TargetPath="%runas%">>%temp%\MakeShortCut.vbs
13.
echo objShortcut.Arguments="%savecred%">>%temp%\MakeShortCut.vbs
14.
echo objShortcut.WorkingDirectory="%progdir%">>%temp%\MakeShortCut.vbs
15.
echo objShortcut.IconLocation= "[PFAD_DER_.EXE_DATEI_DESSEN_SYMBOL_MAN_NUTZEN_MÖCHTE]\[NAME_DER_.EXE_DATEI].exe,0">>%temp%\MakeShortCut.vbs
16.
echo objShortcut.Save>>%temp%\MakeShortCut.vbs
17.

18.
cscript //nologo %temp%\MakeShortCut.vbs
19.

20.
del %temp%\MakeShortCut.vbs
21.
:: Ende der Verknuepfungserstellung 
Das ist die Basis. Aus der heraus kann man wunderbar massenhaft Verknüpfungen erstellen lassen, welche dann auch noch mit Adminrechten ausgeführt werden - Wichtig: Der Admin muss beim Erststart 1x das Kennwort manuell eingeben.

Meine Batchdatei hat derzeit 1306 Zeilen und beinhaltet vier verschiedene Varianten der Verknüpfungserstellung, einen Changelog, einen Hilfeberich sowie "ASCII-Logos"

Ich erweitere das ganze noch deutlich mehr, aber das hat mit diesem Thema dann nichts mehr zu tun.

--

Bleibt nur noch eine Frage:
"Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?"
Bitte warten ..
Mitglied: evinben
15.11.2018, aktualisiert 17.11.2018
Hallo @DerKamiKatze,

wunderbar!

Kann man temporär, bei "echo" Textanweisungen in UTF-8 Schreiben, und danach wieder in ANSI wechseln? Oder ist immer nur eine Codierung pro Batch-Datei möglich?

Vielleicht hilft dir hier mein Beispiel weiter?

01.
:Autobefehlsanzeige ausschalten:
02.
@echo off
03.
:Zeilenanfang in der Eingabeaufforderung auf ">" kürzen (Zeilenausgabe ohne Pfade):
04.
@prompt -$G
05.

06.
:	 CODE
07.
:~~~~~~~~~~~~~~~~
08.
:setlocal EnableDelayedExpansion
09.
:setlocal DisableDelayedExpansion
10.
:PushD %~dp0
11.
echo.
12.

13.
set SrartCodePage=65001
14.
chcp %SrartCodePage% >nul
15.

16.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
17.
echo Test mit verschiedenen Codepages, um den Unterschied zu visualisieren zw.:
18.
echo 1.Variante: Umschaltung von der einen in die andere Codepage, NACHDEM die Text-Variablen bereits gesetzt worden sind.
19.
echo 2.Variante: Jeweils direkte Zuweisung der gewünschten Codepage, BEVOR die Text-Variablen gesetzt worden sind (ohne Doppelgemoppel und Verzerrung = die sauberere Lösung)
20.
echo.
21.
echo In diesem Beispiel werden die Codepages 65001 (Unicode), 1252 (Westeuropäisch) und 1251 (Kyrillisch) verwendet.
22.
echo Es können auch andere Codepages verwendet werden (der Text in den Variablen kann dann bei Bedarf um andere Sprachen ergänzt werden)
23.
echo.
24.
echo Für besseres Verständnis das Batch-Skript einmal in ANSI und einmal in UTF-8 Zeichenkodierung ausführen
25.
echo und anschließend die beiden Ausgabedateien miteinander vergleichen.
26.
echo Bei beiden Zeichenkodierungen lässt sich der Text in der Ausgabedatei mit der 2. Variante bei allen drei Codepages einwandfrei lesen.
27.
echo Mit der 1. Variante ist der Text nicht bei jeder Zeichenkodierung lesbar, z.B.:
28.
echo Wenn die Zeichenkodierung der ausgegebenen Textdatei von UTF-8 auf ANSI umgeschaltet wird (z. B. im Notepad++ über "Kodierung > ANSI"), 
29.
echo wird der Text mit der Codepage 1252 (Westeuropäisch) normal lesbar. Die anderen beiden Texte,
30.
echo mit den Codepages 65001 (Unicode) und 1251 (Kyrillisch), werden dagegen nicht korrekt lesbar.
31.
echo.
32.
echo Einfach die Codepage-Nummer in der Reihenfolge zueinander tauschen und experimentieren, was dann mit dem Text in der 1. Variante passiert!
33.
echo Welche Codepage vor diesem Text gesetzt ist, hat nicht nur auf die Lesbarkeit dieses Textes in der CMD eine Bedeutung, sondern auch auf die nachfolgenden Ergebnisse.
34.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
35.

36.
:Set Options
37.
set OutputFileName=BatchAusgabe.txt
38.

39.
:/Set Options
40.

41.

42.
set OutputFilePath="%~dp0%OutputFileName%"
43.

44.
:Aktuelle Codepage ermitteln (Prüfung)
45.
for /f "tokens=3 delims=. " %%d in ('CHCP') do set CurrentCodepage=%%d
46.
echo Start-Codepage: %CurrentCodepage%>%OutputFilePath%
47.

48.
echo.>>%OutputFilePath%
49.

50.
:Erklärung des Rätsels:
51.
:Für den Text gesetzt in den nachfolgenden beiden Variablen wirkt sich die nacheinander abwechselnde Codepage aus!!!
52.
:D. h. die Zeichen werden von der einen (die %SrartCodePage% oben) zu der anderen Codepage umgewandelt,
53.
:was je nach Codepage-Unterstützug zu mehr oder weniger Informationsverlusten führt.
54.
:Für den Text gesetzt in den namentlich gleichen Variablen in der Unterprozedur ":M10" ganz unten (die über den CALL-Aufruf abgearbeitet wird),
55.
:wird der Text dagegen nicht erst zw. zwei Codepages umgewandelt, sondern direkt in die jeweilige Codepage geschrieben (die sauberere Lösung!),
56.
:also ohne den Umweg mit der Übersetzung von der einen in die andere Codepage (was dann höchstwahrscheinlich
57.
:zu ungewollten Überraschungen bei der Verarbeitung der Zeichen führt).
58.

59.
set DE_String=Muskatnuss Herr Müller! MUSKATNUSS!!!
60.
set RU_String=Матрёшка
61.

62.
:Die gewünschten Codepages nacheinander abarbeiten. Deren Reihenfolge spielt eine Rolle für die 1.Variante (jedoch ohne Auswirkung auf die 2.Variante).
63.
FOR %%d in (65001 1252 1251) do (
64.
	set CodePage=%%d
65.
	call :M5
66.
	call :M10
67.
	)
68.
	
69.
echo.
70.
echo ENDE! Siehe Ergebnisse in der Ausgabedatei %OutputFilePath%
71.

72.
timeout /t 40 >nul
73.
:pause >nul
74.
goto :eof
75.
:END ____________________________________________________
76.

77.

78.

79.
:M5
80.
CHCP %CodePage% >nul
81.
echo Codepage: %CodePage%>>%OutputFilePath%
82.
echo ~~~~~~~~~~~~~~~~~~~~~~~~~~~~>>%OutputFilePath%
83.
echo 1.Variante: Umschaltung von der einen in die andere Codepage (von %SrartCodePage% auf %CodePage%):>>%OutputFilePath%
84.
echo (Codepage-Zuweisung nach den Text-Variablen)>>%OutputFilePath%
85.
echo		DE %DE_String%>>%OutputFilePath%
86.
echo		RU %RU_String%>>%OutputFilePath%
87.
goto :eof
88.

89.
:M10
90.
echo.>>%OutputFilePath%
91.
echo 2.Variante: Codepage-Zuweisung vor den Text-Variablen>>%OutputFilePath%
92.
set DE_String=Muskatnuss Herr Müller! MUSKATNUSS!!!
93.
set RU_String=Матрёшка
94.
echo		DE %DE_String%>>%OutputFilePath%
95.
echo		RU %RU_String%>>%OutputFilePath%
96.
echo.>>%OutputFilePath%
97.
goto :eof

Viel Erfolg
Bitte warten ..
Mitglied: DerKamiKatze
21.02.2019 um 10:32 Uhr
Guten Morgen.

Das mit dem temporären Schreiben in UTF-8 hat leider nicht geklappt. Habe mich mangels Zeit dazu entschlossen, dass Umlaute im klassischen "ue", "ae" usw, geschrieben werden.

Wie dem auch Sei... Ich habe eine neue Herausforderung, für dich ich noch keine Lösung finden konnte:

Kann man bei der Verknüpfungserstellung automatisch den Haken im Reiter "Kompatibilität" bei "als Administrator ausführen" setzen?

Hintergrund ist der, dass es Systeme gibt, die ohne den "savecred" Befehl auskommen, die Programme dennoch "als Admin ausgeführt" werden müssen. Dies sind autarke Systeme ohne tatsächlichen Adminaccount. D.h. wenn diese den "savecred" Befehl nutzen, poppt zwar eine einmalige Eingabe des Kennworts für den User "administrator" auf, da dieser jedoch nicht existiert, kommt der User da nicht weiter.

Danke vorab für alle Ideen/Vorschläge
Bitte warten ..
Mitglied: evinben
21.02.2019 um 15:24 Uhr
Hallo @DerKamiKatze,

lies z.B. hier:

"How to create a Run As Administrator shortcut using Powershell"
https://stackoverflow.com/questions/28997799/how-to-create-a-run-as-admi ...

Gruß
Bitte warten ..
Mitglied: DerKamiKatze
22.02.2019 um 07:48 Uhr
Guten Morgen.

Ich bin bei PowerShell ein absoluter Noob. Mich da rain zu fuchsen, steht noch auf meiner To-Do-Liste... Bis dahin gilt die Dumme Frage meinerseits:

Wie baue ich den befehl

01.
$WshShell = New-Object -comObject WScript.Shell
02.
$Shortcut = $WshShell.CreateShortcut("$Home\Desktop\ColorPix.lnk")
03.
$Shortcut.TargetPath = "C:\Program Files (x86)\ColorPix\ColorPix.exe"
04.
$Shortcut.Save()
05.

06.
$bytes = [System.IO.File]::ReadAllBytes("$Home\Desktop\ColorPix.lnk")
07.
$bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON
08.
[System.IO.File]::WriteAllBytes("$Home\Desktop\ColorPix.lnk", $bytes)
in eine Batch Datei ein?
Bitte warten ..
Mitglied: DerKamiKatze
22.02.2019 um 09:19 Uhr
So. Bitte verzeiht mir mein dummes Gefrage.. meist folgt erst darauf die Verbissenheit.

Die Lösung sieht wie folgt aus:

01.
echo $WshShell = New-Object -comObject WScript.Shell>>%temp%\DP_Server.ps1
02.
echo $Shortcut = $WshShell.CreateShortcut("ORT UND NAME DEINER VERKNÜPFUNG.lnk")>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
03.
echo $Shortcut.TargetPath = "ORT UND NAME DEINER .EXE DATEI.exe">>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
04.
echo $Shortcut.Save()>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
05.
echo $bytes = [System.IO.File]::ReadAllBytes("ORT UND NAME DEINER VERKNÜPFUNG.lnk")>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
06.
echo $bytes[0x15] = $bytes[0x15] -bor 0x20 #set byte 21 (0x15) bit 6 (0x20) ON>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
07.
echo [System.IO.File]::WriteAllBytes("ORT UND NAME DEINER VERKNÜPFUNG.lnk", $bytes)>>%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
08.
PowerShell.exe -NoProfile -ExecutionPolicy Bypass -Command "%temp%\NAME DES TEMPORÄREN SCRIPTS.ps1"
09.
del %temp%\NAME DES TEMPORÄREN SCRIPTS.ps1
Auf diese Weise wird erst ein PowerShell Script im temporären Ordner erzeugt. Dieses Script erzeugt dann beim Ausführen mittels PowerShell eine Verknüpfung zur gewünschten .exe Datei im gewünschten Zielordner, welche jedoch pauschal den Haken bei "Als Administrator ausführen" gesetzt hat. Dies wird jedoch grafisch nicht angezeigt, wenn man dies unter Eigenschaften => Kompatibilität nachschaut. Ist aber da. Habe es soeben getestet und funktioniert einwandfrei!

So - nun schreibe ich das alles auf meine benötigten Stellen im Code um und kann dann ruhigen Gewissens ins Wochenende gehen!

Cheers!
Bitte warten ..
Mitglied: evinben
22.02.2019, aktualisiert um 09:54 Uhr
Hallo,

einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:

01.
set  PowerShellFile=MeineErstePowerShelDateil.ps1
02.

03.
echo $WshShell = New-Object -comObject WScript.Shell>%PowerShellFile%
04.
echo $Shortcut = $WshShell.CreateShortcut("$Home\Desktop\ColorPix.lnk")>>%PowerShellFile%
05.

06.
echo und hier alle Restlichen Zeilen, welche in die PowerShell-Datei hingeschrieben werden müssen, mit der selben Struktur eintragen.
07.

08.
echo Nächste Zeile>>%PowerShellFile%
09.
echo Nächste Zeile>>%PowerShellFile%
10.
echo ...
11.

12.
echo Dann diese neue PowerShell-Datei aus dem Batch-Skript ausführen lassen
13.
Bitte warten ..
Mitglied: evinben
22.02.2019 um 09:32 Uhr
du warst schneller eine Antwort zu finden, als ich deine Nachricht gelesen zu haben.
Bravo
Bitte warten ..
Mitglied: DerKamiKatze
22.02.2019 um 09:44 Uhr


Darf ich mal blöde nachfragen, worin der Unterschied zwischen
und
01.
>>
liegt? Mit zwei klappts doch?
Blicke dahingehend nicht ganz durch.
Bitte warten ..
Mitglied: freesolo
22.02.2019, aktualisiert um 09:59 Uhr
einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:
Vollkommen überflüssig, da reicht ein Oneliner
01.
Powershell -Executionpolicy ByPass -Command "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut(\"$Home\Desktop\ColorPix.lnk\"); $Shortcut.TargetPath = 'C:\Program Files (x86)\ColorPix\ColorPix.exe'; $Shortcut.Save(); $bytes = [System.IO.File]::ReadAllBytes(\"$Home\Desktop\ColorPix.lnk\"); $bytes[0x15] = $bytes[0x15] -bor 0x20; [System.IO.File]::WriteAllBytes(\"$Home\Desktop\ColorPix.lnk\",$bytes)"
Bitte warten ..
Mitglied: evinben
22.02.2019, aktualisiert um 09:56 Uhr
Hallo DerKamiKatze,

mit >> bei allen darauf folgenden Zeilen ist richtig. Ich habe bloß auf der Schnelle (Copy&Paste) es dann nicht mehr ergänzt (bereits korrigiert).

Mit nur einem Größer-als-Zeichen (>) wird die Datei überschrieben
Mit zwei aufeinander folgenden Größer-als-Zeichen (>>) wird die Datei um jede Zeile ergänzt.

Darf ich mal blöde nachfragen ...

bitte nein, jedoch frag einfach ruhig nach und beleidige dich selbst nicht
Bitte warten ..
Mitglied: DerKamiKatze
22.02.2019 um 09:58 Uhr
Zitat von freesolo:

einfach mit echo und mit > am Ende jeder Zeile, um jede diese Zeile in eine Datei zu schreiben:
Vollkommen überflüssig, da reicht ein Onliner
01.
> Powershell -Executionpolicy ByPass -Command "$WshShell = New-Object -comObject WScript.Shell; $Shortcut = $WshShell.CreateShortcut(\"$Home\Desktop\ColorPix.lnk\"); $Shortcut.TargetPath = 'C:\Program Files (x86)\ColorPix\ColorPix.exe'; $Shortcut.Save(); $bytes = [System.IO.File]::ReadAllBytes(\"$Home\Desktop\ColorPix.lnk\"); $bytes[0x15] = $bytes[0x15] -bor 0x20; [System.IO.File]::WriteAllBytes(\"$Home\Desktop\ColorPix.lnk\",$bytes)"
02.
> 

Interessant. Da ich - wie gesagt - ein "PowerShell n00b", bin nehme ich dies erstmal nur zur Kenntnis. Mein inzwischen 11.478 Zeilen langer Code in der .bat Datei wird irgendwann gänzlich in PowerShell geschrieben. Aber das mache ich erst, wenn ich dahingehend mehr gelernt habe.
Bitte warten ..
Mitglied: evinben
22.02.2019 um 10:00 Uhr
Vollkommen überflüssig, da reicht ein Onliner

ein "onliner" ist für vieles scheinbar etwas ganz cooles. Aber die Übersicht? Diese ist ja bei der virtuellen Wellt sehr wichtig.
Mit einer Befehlszeile ist die Verarbeitung nicht etwa spürend schneller.
Bitte warten ..
Mitglied: DerKamiKatze
22.02.2019 um 10:03 Uhr
Zitat von evinben:

Vollkommen überflüssig, da reicht ein Onliner

ein "onliner" ist für vieles scheinbar etwas ganz cooles. Aber die Übersicht? Diese ist ja bei der virtuellen Wellt sehr wichtig.
Mit einer Befehlszeile ist die Verarbeitung nicht etwa spürend schneller.

Okay. D.h. ob Oneliner oder alles in separate Zeilen - spielt für die Funktionalität keine Rolle?
Bitte warten ..
Neue Wissensbeiträge
Internet

Schwarzer Tag für die Netzfreiheit: Die umstrittene Urheberrechtsreform wurde beschlossen

Information von Frank vor 13 StundenInternet22 Kommentare

Ich zitiere einfach mal Julia Reda von den Piraten, da mir selbst einfach die Worte dazu fehlen: Schwarzer Tag ...

Internet
Ist zwar keien Anleitung, aber
Anleitung von SachsenHessi vor 14 StundenInternet1 Kommentar

oder doch eine Anleitung ? Für die nächste EU-Wahl ? SH

PHP
Pfsense - Vouchergenerator 1.6.1
Anleitung von cafepost vor 15 StundenPHP

Hallo Zusammen , aus Sicherheitsgründen wurde mein Server auf den neuesten Stand gebracht, jetzt wollte ich den Vouchergenerator 1.6.1 ...

Internet

Verlag protestiert gegen Artikel 13 (jetzt Artikel 17) der geplanten EU-Verordnung

Information von Dilbert-MD vor 18 StundenInternet

Leider etwas spät, aber immerhin hat auch der heise-Verlag eingesehen, dass die Umsetzung der Urheberrechtsreform - so wie sie ...

Heiß diskutierte Inhalte
Internet
Schwarzer Tag für die Netzfreiheit: Die umstrittene Urheberrechtsreform wurde beschlossen
Information von FrankInternet22 Kommentare

Ich zitiere einfach mal Julia Reda von den Piraten, da mir selbst einfach die Worte dazu fehlen: Schwarzer Tag ...

Voice over IP
Mikrotik: Voip mit SIP Phones in verschiedenen Subnetzen mit FritzBox
Frage von SpartacusVoice over IP20 Kommentare

Hallo, ich habe das Problem, dass ich verschiedene SIP-Clients in unterschiedlichen Subnetzen habe, die mit meinem Server FritzBox7412 keine ...

Batch & Shell
Computer im Active Directory filtern
Frage von chkdskBatch & Shell16 Kommentare

Hallo Zusammen, ich möchte über die Powershell Computer im Active Directory filtern. Als Beispiel: listet mir alle Computer auf, ...

LAN, WAN, Wireless
Netzwerkkomponenten von 2011 und nur 100 Mbit?
gelöst Frage von FalaffelLAN, WAN, Wireless16 Kommentare

Hallo zusammen, ist es möglich, dass bei Netzwerkkomponenten von ca. 2011 nicht mehr wie 100 Mbit möglich ist? Konkret ...