Bagaimana cara membuat shortcut dari CMD?

76

Bagaimana saya bisa membuat file pintasan ( .lnk) ke file lain atau dapat dieksekusi, menggunakan utilitas baris perintah?

Shantanu
sumber
1
Tampaknya tidak ada cara langsung untuk melakukan itu. Beberapa orang memiliki alat tertulis yang memungkinkan Anda melakukannya; ini salah satunya . Pencarian Google untuk "windows create shortcut command line" muncul beberapa yang lain. (Saya belum mencoba satupun dari mereka.)
Keith Thompson
@iglvzx - Saya tidak yakin pengeditan yang Anda lakukan sudah benar. Saya tidak berpikir bahwa Shantanu membutuhkan skrip batch - ini bisa berupa cara apa pun untuk membuat * .lnk ke file * .exe lainnya.
alfasin
@alfasin saya menambahkan (.ink file), karena ada beberapa kebingungan. Saya merevisi pertanyaan untuk mencerminkan komentar Shantanu. Meskipun Anda menyediakan cara untuk membuat 'pintasan', itu tidak menjawab pertanyaan khusus ini.
iglvzx
1
Gunakan yang berikut ini: powershell "$ s = (Objek Baru -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Simpan () "Jelas, ganti" '% userprofile% \ Desktop \ shortcut.lnk "dan" C: \ Windows \ "masing-masing dengan jalur pintas dan jalur target Anda.
cowlinator
@clinlinator Seperti yang diketik, saran Anda tidak berfungsi.
Ploni

Jawaban:

53

Ada beberapa informasi yang sangat berguna di situs ini: http://ss64.com/nt/shortcut.html

Sepertinya ada shortcut.exebeberapa kit sumber daya yang tidak saya miliki.
Seperti banyak situs lain menyebutkan, tidak ada cara bawaan untuk melakukannya dari file batch.

Tetapi Anda bisa melakukannya dari skrip VB:

Bagian opsional dalam VBscript di bawah ini dikomentari:

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

Jadi, jika Anda benar - benar harus melakukannya, maka Anda dapat membuat file batch Anda menulis skrip VB ke disk, memohonnya dan kemudian menghapusnya lagi. Misalnya, seperti:

@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

Menjalankan skrip di atas menghasilkan pintasan baru di desktop saya:
Jalan pintas yang dihasilkan

Berikut cuplikan yang lebih lengkap dari kontributor anonim (diperbarui dengan perbaikan kecil):

@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
sumber
1
Terkait: MSDN, Shell Links
iglvzx
Ini berfungsi bagus untuk pintasan ke file. Namun, saya mengalami masalah aneh menggunakannya untuk pintasan ke folder, ketika variabel saya Esc_LinkTarget berisi variabel lingkungan yang mencoba mendapatkan folder induknya. (Sesuatu seperti% CD% \ .. tidak berfungsi, tetapi% CD% berfungsi). Jenis target pintas menjadi 'File' bukan 'Folder'
EDM
1
@ Edmund Masalah yang menarik. Saya tidak punya waktu untuk memeriksanya, tetapi saya akan menganggap garis miring dapat membuat perbedaan.
Der Hochstapler
Catatan: jika Anda menggunakan SET Esc_LinkTarget=%0maka Anda harus menghapus "dariecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Black
Daripada membuat vbscript untuk setiap eksekusi, itu akan jauh lebih baik digunakan Wscript.Argumentsuntuk mendapatkan argumen baris perintah ... lol
Sancarn
22

Berikut ini adalah solusi serupa dengan menggunakan powershell (saya tahu, Anda mungkin dapat menulis ulang seluruh file batch Anda di PS, tetapi jika Anda hanya ingin Get It Done ™ ...)

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()"

Anda mungkin harus secara eksplisit menentukan jalur ke PS dalam file Anda, tetapi itu harus bekerja. Ada beberapa atribut tambahan yang dapat Anda potong melalui objek ini juga:

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
sumber
Trix : Jika Anda percaya bahwa Anda memiliki cara yang lebih baik untuk melakukan ini , cukup posting sebagai jawaban baru (menghubungkan ke yang ini, jika sesuai).
Scott
17

Selain shortcut.exe, Anda juga dapat menggunakan versi baris perintah NirCmd untuk membuat pintasan. http://nircmd.nirsoft.net/shortcut.html

Sementara Loop
sumber
11
Saya merekomendasikan hampir semuanya dari NirSoft, ini adalah toolset geek ulung
Orang Brasil
10

Bagaimana dengan menggunakan perintah mklink? C: \ Windows \ System32> mklink Membuat tautan simbolik.

MKLINK [[/ D] | [/ H] | [/ J]] Tautan Target

    /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
sumber
10
Gagasan bagus, tetapi symlink tampaknya berperilaku sedikit berbeda dari pintasan. Jika saya membuat pintasan ke solusi Visual Studio, itu akan membuka semua proyek yang relatif-pathed dengan benar. Namun, jika saya membuka solusi yang sama melalui symlink, direktori yang berfungsi adalah path di mana symlink berada, bukan path yang dirujuk.
Walter Stabosz
7

Setelah semua diskusi yang kami lakukan di sini, ini adalah solusi yang saya sarankan: unduh: http://optimumx.com/download/Shortcut.zip ekstrak di desktop Anda (misalnya). Sekarang, misalkan Anda ingin membuat pintasan untuk file bernama scrum.pdf (juga di desktop):
1. buka CMD dan buka folder desktop
2. jalankan:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

itu akan membuat pintasan bernama sc.lnk di desktop Anda yang akan menunjuk ke file asli (scrum.pdf)

Alfasin
sumber
Itu bukan jalan pintas; itu hanya file batch yang menjalankan program tertentu.
Keith Thompson
1
pintasan adalah sesuatu yang Anda jalankan dari windows, karena ia menggunakan CMD pada judul dan meletakkan tag "command-line" Saya berasumsi ia ingin menjalankannya dari CMD. File batch setara dengan "pintasan" windows saat Anda menjalankan CMD (dos like) env.
alfasin
2
Karena dia memasukkan "shortcut (.lnk file)" di tubuh pertanyaan, saya berasumsi dia ingin membuat shortcut yang sebenarnya.
Keith Thompson
1
maaf untuk kejelasan saya ingin memiliki ikon di desktop saya yang saya buat di cmd yang akan menjadi jalan pintas ke file exe
Shantanu
sekarang saya akhirnya mengerti (pemikir lambat - apa yang bisa Anda lakukan ...) Saya mengubah jawaban saya. semoga membantu!
alfasin
0

Program gratis ini memerlukan fungsionalitas http://www.nirsoft.net/utils/nircmd2.html : (contoh dari halaman web tersebut) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

Sampel saya sendiri untuk dicoba: pintasan nircmd.exe "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Windows Calculator"

goldie
sumber
0

Saya tahu topik ini sudah lama tetapi saya ingin memberikan solusi sederhana yang bekerja untuk saya.

Saya pertama kali menyalin file .ico ke drive C: saya. Kemudian saya membuat shortcut di desktop saya dan mengatur ikon ke file ico pada drive C: saya. Saya kemudian menyalin .ico dan pintasan ke jaringan berbagi yang memiliki akses pengguna saya. Sesampai di sana saya menulis file batch berikut untuk menyalin ico dan .url ke desktop windows 7 pengguna. Ini menciptakan pintasan di semua pengguna desktop dan membuat file ikon yang saya atur saat membuat pintasan. Saya harap ini membantu seseorang.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause
Michele
sumber
Jika ini adalah pendekatan yang harus diambil, lebih baik untuk membuat pintasan aktual (.lnk) yang menyematkan ikon di dalamnya. Pintasan itu kemudian dapat disalin di mana-mana.
LPChip