Wie erstelle ich eine Verknüpfung von CMD?

76

Wie kann ich .lnkmithilfe von Befehlszeilenprogrammen eine Verknüpfungsdatei ( ) zu einer anderen Datei oder ausführbaren Datei erstellen ?

Shantanu
quelle
1
Es scheint keinen einfachen Weg zu geben, dies zu tun. Einige Leute haben Tools geschrieben, mit denen Sie es tun können. Hier ist einer von ihnen . Bei einer Google-Suche nach "Windows-Befehlszeile zum Erstellen von Verknüpfungen" werden einige andere angezeigt. (Ich habe keinen von ihnen ausprobiert.)
Keith Thompson
@iglvzx - Ich bin nicht sicher, ob die von Ihnen vorgenommene Bearbeitung korrekt ist. Ich glaube nicht, dass Shantanu ein Batch-Skript benötigt - es könnte eine Möglichkeit sein, eine * .lnk-Datei in einer anderen * .exe-Datei zu erstellen.
Alfasin
@alfasin fügte ich hinzu (.ink file), da es einige Verwirrung gab. Ich habe die Frage überarbeitet, um Shantanus Kommentar widerzuspiegeln. Sie können zwar Verknüpfungen erstellen, diese spezielle Frage wird jedoch nicht beantwortet.
Iglvzx
1
Verwenden Sie Folgendes: powershell "$ s = (New-Object -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () "Offensichtlich ersetzen Sie" '% userprofile% \ Desktop \ shortcut.lnk "und" C: \ Windows \ "durch Ihren Verknüpfungs- bzw. Zielpfad.
Cowlinator
@cowlinator Wie eingegeben, funktioniert Ihr Vorschlag nicht.
Ploni

Antworten:

53

Auf dieser Website finden Sie einige sehr nützliche Informationen: http://ss64.com/nt/shortcut.html

Scheint, als ob es einige shortcut.exein einem Resource Kit gibt, die ich nicht habe.
Wie viele andere Websites bereits erwähnen, gibt es keine integrierte Möglichkeit, dies aus einer Batchdatei heraus zu tun.

Sie können dies jedoch über ein VB-Skript tun:

Optionale Abschnitte im folgenden VB-Skript sind auskommentiert:

Set oWS = WScript.CreateObject("WScript.Shell")
sLinkFile = "C:\MyShortcut.LNK"
Set oLink = oWS.CreateShortcut(sLinkFile)
    oLink.TargetPath = "C:\Program Files\MyApp\MyProgram.EXE"
 '  oLink.Arguments = ""
 '  oLink.Description = "MyProgram"   
 '  oLink.HotKey = "ALT+CTRL+F"
 '  oLink.IconLocation = "C:\Program Files\MyApp\MyProgram.EXE, 2"
 '  oLink.WindowStyle = "1"   
 '  oLink.WorkingDirectory = "C:\Program Files\MyApp"
oLink.Save

Wenn Sie dies wirklich tun müssen , können Sie Ihre Batch-Datei veranlassen, das VB-Skript auf die Festplatte zu schreiben, es aufzurufen und dann wieder zu entfernen. Zum Beispiel so:

@echo off
echo Set oWS = WScript.CreateObject("WScript.Shell") > CreateShortcut.vbs
echo sLinkFile = "%HOMEDRIVE%%HOMEPATH%\Desktop\Hello.lnk" >> CreateShortcut.vbs
echo Set oLink = oWS.CreateShortcut(sLinkFile) >> CreateShortcut.vbs
echo oLink.TargetPath = "C:\Windows\notepad.exe" >> CreateShortcut.vbs
echo oLink.Save >> CreateShortcut.vbs
cscript CreateShortcut.vbs
del CreateShortcut.vbs

Das Ausführen des obigen Skripts führt zu einer neuen Verknüpfung auf meinem Desktop:
Resultierende Verknüpfung

Hier ist ein vollständigerer Ausschnitt eines anonymen Mitwirkenden (aktualisiert mit einem kleinen Fix):

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
SET LinkName=Hello
SET Esc_LinkDest=%%HOMEDRIVE%%%%HOMEPATH%%\Desktop\!LinkName!.lnk
SET Esc_LinkTarget=%%SYSTEMROOT%%\notepad.exe
SET cSctVBS=CreateShortcut.vbs
SET LOG=".\%~N0_runtime.log"
((
  echo Set oWS = WScript.CreateObject^("WScript.Shell"^) 
  echo sLinkFile = oWS.ExpandEnvironmentStrings^("!Esc_LinkDest!"^)
  echo Set oLink = oWS.CreateShortcut^(sLinkFile^) 
  echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^("!Esc_LinkTarget!"^)
  echo oLink.Save
)1>!cSctVBS!
cscript //nologo .\!cSctVBS!
DEL !cSctVBS! /f /q
)1>>!LOG! 2>>&1
Der Hochstapler
quelle
1
Siehe auch
Dies eignet sich hervorragend für Verknüpfungen zu einer Datei. Ich habe jedoch ein seltsames Problem damit, eine Verknüpfung zu einem Ordner herzustellen, wenn meine Variable Esc_LinkTarget eine Umgebungsvariable enthält, die versucht, den übergeordneten Ordner abzurufen. (So ​​etwas wie% CD% \ .. funktioniert nicht, aber% CD% funktioniert). Der Zieltyp für die Verknüpfung wird zu einer 'Datei' anstelle von 'Ordner'
EDM
1
@ Edmund Interessantes Problem. Ich habe keine Zeit, es zu untersuchen, aber ich würde annehmen, dass ein abschließender Schrägstrich einen Unterschied machen könnte.
Der Hochstapler
Hinweis: Wenn Sie verwenden , SET Esc_LinkTarget=%0dann müssen Sie das Entfernen "vonecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Schwarz
Anstatt ein vbscript für jede Ausführung zu erstellen, wäre es weitaus besser gewesen Wscript.Arguments, die Befehlszeilenargumente
abzurufen
22

Hier ist eine ähnliche Lösung mit Powershell (ich weiß, Sie können wahrscheinlich Ihre gesamte Batch-Datei in PS neu schreiben, aber wenn Sie nur Get It Done ™ wollen ...)

set TARGET='D:\Temp'
set SHORTCUT='C:\Temp\test.lnk'
set PWS=powershell.exe -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile

%PWS% -Command "$ws = New-Object -ComObject WScript.Shell; $s = $ws.CreateShortcut(%SHORTCUT%); $S.TargetPath = %TARGET%; $S.Save()"

Möglicherweise müssen Sie den Pfad zu PS in Ihrer Datei explizit angeben, aber es sollte funktionieren. Es gibt einige zusätzliche Attribute, die Sie auch über dieses Objekt verwalten können:

Name             MemberType Definition                             
----             ---------- ----------                             
Load             Method     void Load (string)                     
Save             Method     void Save ()                           
Arguments        Property   string Arguments () {get} {set}        
Description      Property   string Description () {get} {set}      
FullName         Property   string FullName () {get}               
Hotkey           Property   string Hotkey () {get} {set}           
IconLocation     Property   string IconLocation () {get} {set}     
RelativePath     Property   string RelativePath () {set}           
TargetPath       Property   string TargetPath () {get} {set}       
WindowStyle      Property   int WindowStyle () {get} {set}         
WorkingDirectory Property   string WorkingDirectory () {get} {set} 
SmallClanger
quelle
Trix : Wenn Sie der Meinung sind, dass Sie dies besser können , posten Sie es einfach als neue Antwort (verknüpfen Sie sie gegebenenfalls mit dieser).
Scott
17

Neben shortcut.exe können Sie auch die Befehlszeilenversion von NirCmd verwenden, um eine Verknüpfung zu erstellen. http://nircmd.nirsoft.net/shortcut.html

While-Schleife
quelle
11
Ich empfehle fast alles von NirSoft, es ist das ultimative Geek-Toolset
That Brazilian Guy
10

Wie wäre es mit mklink Befehl? C: \ Windows \ System32> mklink Erstellt eine symbolische Verknüpfung.

MKLINK [[/ D] | [/ H] | [/ J]] Linkziel

    /D      Creates a directory symbolic link.  Default is a file
            symbolic link.
    /H      Creates a hard link instead of a symbolic link.
    /J      Creates a Directory Junction.
    Link    specifies the new symbolic link name.
    Target  specifies the path (relative or absolute) that the new link
            refers to.
Mike
quelle
10
Gute Idee, aber Symlinks scheinen sich ein bisschen anders zu verhalten als Verknüpfungen. Wenn ich eine Verknüpfung zu einer Visual Studio-Lösung erstelle, werden alle Projekte mit relativem Pfad korrekt geöffnet. Wenn ich dieselbe Lösung jedoch über einen Symlink öffne, ist das Arbeitsverzeichnis das des Pfads, in dem sich der Symlink befindet, nicht der Pfad, auf den er verweist.
Walter Stabosz
7

Nach all den Diskussionen, die wir hier geführt haben, ist dies meine vorgeschlagene Lösung: Download: http://optimumx.com/download/Shortcut.zip Extrahieren Sie sie auf Ihrem Desktop (zum Beispiel). Angenommen, Sie möchten eine Verknüpfung für eine Datei mit dem Namen scrum.pdf erstellen (auch auf dem Desktop):
1. Öffnen Sie CMD und wechseln Sie in den Desktop-Ordner.
2. Führen Sie Folgendes aus:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

Es wird eine Verknüpfung mit dem Namen sc.lnk auf Ihrem Desktop erstellt, die auf die Originaldatei (scrum.pdf) verweist.

alfasin
quelle
Das ist keine Abkürzung; Es ist nur eine Batch-Datei, die ein bestimmtes Programm aufruft.
Keith Thompson
1
Eine Verknüpfung wird unter Windows ausgeführt, da er CMD im Titel verwendet und den Tag "command-line" (Befehlszeile) verwendet. Ich nahm an, dass er sie unter CMD ausführen möchte. Eine Batch-Datei entspricht einer Windows-Verknüpfung, wenn Sie CMD (dos like) env ausführen.
Alfasin
2
Da er "Verknüpfung (.lnk-Datei)" in den Textkörper der Frage eingefügt hat, bin ich davon ausgegangen, dass er eine tatsächliche Verknüpfung erstellen möchte.
Keith Thompson
1
Entschuldigung für die Klarheit, ich wollte ein Symbol auf meinem Desktop haben, das ich in cmd gemacht habe, das eine Verknüpfung zu einer exe-Datei sein würde
Shantanu
Jetzt, wo ich endlich verstanden habe (langsamer Denker - was können Sie tun ...), habe ich meine Antwort geändert. ich hoffe es hilft!
Alfasin
0

Für dieses kostenlose Programm ist Funktionalität erforderlich. Http://www.nirsoft.net/utils/nircmd2.html : (Beispiel von dieser Webseite) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

Mein eigenes Beispiel zum Ausprobieren: Verknüpfung "nircmd.exe" "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Windows-Rechner"

Goldie
quelle
0

Ich weiß, dass dieses Thema alt ist, aber ich wollte die einfache Lösung anbieten, die für mich funktioniert hat.

Ich habe die ICO-Datei zuerst auf mein Laufwerk C: kopiert. Dann habe ich die Verknüpfung auf meinem Desktop erstellt und das Symbol auf die ICO-Datei auf meinem Laufwerk C: gesetzt. Ich habe dann sowohl die .ico-Datei als auch die Verknüpfung auf eine Netzwerkfreigabe kopiert, auf die meine Benutzer Zugriff haben. Dort angekommen habe ich die folgende Batch-Datei geschrieben, um die Dateien ico und .url auf den Windows 7-Desktop des Benutzers zu kopieren. Dies erstellt die Verknüpfung auf dem Desktop aller Benutzer und behält die Symboldatei bei, die ich beim Erstellen der Verknüpfung festgelegt habe. Ich hoffe das hilft jemandem.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause
Michele
quelle
In diesem Fall ist es besser, die eigentliche Verknüpfung (.lnk) zu erstellen, in die das Symbol eingebettet ist. Diese Verknüpfung kann dann überall kopiert werden.
LPChip