Làm thế nào để tạo một phím tắt từ CMD?


76

Làm cách nào tôi có thể tạo một tệp lối tắt ( .lnk) sang một tệp khác hoặc có thể thực thi được, bằng cách sử dụng các tiện ích dòng lệnh?


1
Dường như không có cách nào đơn giản để làm điều đó. Một số người có các công cụ bằng văn bản cho phép bạn làm điều đó; đây là một trong số họ . Một tìm kiếm Google cho "cửa sổ tạo dòng lệnh tắt" bật lên một số thứ khác. (Tôi chưa thử bất kỳ cái nào trong số chúng.)
Keith Thompson

@iglvzx - Tôi không chắc chắn rằng chỉnh sửa bạn đã làm là chính xác. Tôi không nghĩ rằng Chaianu cần một tập lệnh bó - đó có thể là bất kỳ cách nào để tạo tệp * .lnk sang tệp * .exe khác.
alfasin

@alfasin Tôi đã thêm (.ink file), vì có một số nhầm lẫn. Tôi đã sửa đổi câu hỏi để phản ánh bình luận của Chaianu. Mặc dù bạn cung cấp một cách để tạo 'phím tắt', nhưng nó không trả lời câu hỏi cụ thể này.
iglvzx

1
Sử dụng như sau: powershell "$ s = (New-Object -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ keyboard.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () "Rõ ràng, thay thế" '% userprofile% \ Desktop \ key.lnk "và" C: \ Windows \ "bằng đường dẫn tắt và đường dẫn đích của bạn, tương ứng.
chăn bò

@cowlinator Như đã gõ, đề xuất của bạn không hoạt động.
Ploni

Câu trả lời:


53

Có một số thông tin rất hữu ích trên trang web này: http://ss64.com/nt/shortcut.html

Có vẻ như có một số shortcut.exetrong bộ tài nguyên mà tôi không có.
Như nhiều trang web khác đề cập, không có cách tích hợp nào để thực hiện điều đó từ một tệp bó.

Nhưng bạn có thể làm điều đó từ một tập lệnh VB:

Các phần tùy chọn trong VBscript dưới đây được nhận xét:

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

Vì vậy, nếu bạn thực sự phải làm điều đó, thì bạn có thể làm cho tệp bó của bạn ghi tập lệnh VB vào đĩa, gọi nó và sau đó xóa nó một lần nữa. Ví dụ, như vậy:

@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

Chạy đoạn script trên dẫn đến một lối tắt mới trên màn hình của tôi:
Phím tắt kết quả

Đây là một đoạn hoàn chỉnh hơn từ một người đóng góp ẩn danh (được cập nhật với một sửa chữa nhỏ):

@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

1
Liên quan: MSDN, Shell Links
iglvzx

Điều này hoạt động tuyệt vời cho các phím tắt đến một tập tin. Tuy nhiên, tôi đang gặp một vấn đề kỳ lạ khi sử dụng nó cho lối tắt vào thư mục, khi biến Esc_LinkTarget của tôi chứa biến môi trường đang cố lấy thư mục mẹ của nó. (Một cái gì đó như% CD% \ .. không hoạt động, nhưng% CD% hoạt động). Loại mục tiêu lối tắt trở thành 'Tệp' thay vì 'Thư mục'
EDM

1
@Edmund Vấn đề thú vị. Tôi không có thời gian để xem xét nó, nhưng tôi cho rằng một dấu gạch chéo có thể tạo ra sự khác biệt.
Der Hochstapler 18/03/2016

Lưu ý: nếu bạn sử dụng SET Esc_LinkTarget=%0thì bạn phải xóa "từecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Black

Thay vì tạo một vbscript cho mỗi lần thực hiện, tốt hơn hết là sử dụng Wscript.Argumentsđể lấy các đối số dòng lệnh ... lol
Sancarn

22

Đây là một giải pháp tương tự bằng cách sử dụng powershell (Tôi biết, có lẽ bạn có thể viết lại toàn bộ tệp bó của mình trong PS, nhưng nếu bạn chỉ muốn 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()"

Bạn có thể phải tự xác định đường dẫn đến PS trong tệp của mình, nhưng nó sẽ hoạt động. Có một số thuộc tính bổ sung mà bạn có thể đọc qua đối tượng này:

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} 

Trix : Nếu bạn tin rằng bạn có cách làm tốt hơn , chỉ cần đăng nó dưới dạng câu trả lời mới (liên kết với câu hỏi này, nếu phù hợp).
Scott


10

Làm thế nào về việc sử dụng lệnh mklink? C: \ Windows \ System32> mklink Tạo liên kết tượng trưng.

MKLINK [[/ D] | [/ H] | [/ J]] Mục tiêu liên kết

    /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.

10
Ý tưởng tốt, nhưng các liên kết tượng trưng có vẻ hành xử hơi khác so với các phím tắt. Nếu tôi tạo một lối tắt đến một giải pháp Visual Studio, nó sẽ mở tất cả các dự án tương đối chính xác. Tuy nhiên, nếu tôi mở cùng một giải pháp thông qua một liên kết tượng trưng, ​​thì thư mục làm việc là đường dẫn chứa liên kết tượng trưng, ​​không phải là đường dẫn mà nó đề cập đến.
Walter Stabosz

7

Sau tất cả các cuộc thảo luận chúng tôi đã có ở đây, đây là giải pháp được đề xuất của tôi: download: http://optimumx.com/doad/Shortcut.zip giải nén nó trên máy tính để bàn của bạn (ví dụ). Bây giờ, giả sử bạn muốn tạo một lối tắt cho một tệp có tên scrum.pdf (cũng trên máy tính để bàn):
1. mở CMD và vào thư mục máy tính để bàn
2. chạy:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

nó sẽ tạo một lối tắt gọi là sc.lnk trên máy tính để bàn của bạn sẽ trỏ đến tệp gốc (scrum.pdf)


Đó không phải là một phím tắt; nó chỉ là một tệp bó gọi một chương trình được chỉ định.
Keith Thompson

1
một phím tắt là thứ bạn chạy từ windows, vì anh ta đã sử dụng CMD trong tiêu đề và đặt thẻ "dòng lệnh" Tôi giả sử anh ta muốn chạy nó từ CMD. Một tệp bó tương đương với một "phím tắt" của windows khi bạn chạy trong CMD (dos like) env.
alfasin

2
Vì anh ấy đặt "phím tắt (tệp .lnk)" trong phần thân của câu hỏi, tôi cho rằng anh ấy muốn tạo một lối tắt thực sự.
Keith Thompson

1
xin lỗi vì sự rõ ràng tôi muốn có một biểu tượng trên máy tính để bàn của mình mà tôi đã tạo trong cmd đó sẽ là một lối tắt đến một tệp exe
Chaianu

bây giờ tôi cuối cùng đã hiểu (người suy nghĩ chậm - bạn có thể làm gì ...) Tôi đã thay đổi câu trả lời của mình. hy vọng nó giúp!
alfasin

0

Chương trình miễn phí này có chức năng bắt buộc http://www.nirsoft.net/utils/nircmd2.html : (mẫu từ trang web đã nói) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

Mẫu thử của riêng tôi để thử: phím tắt nircmd.exe "c: \ windows \ system32 \ calc.exe" "~ $ thư mục.desktop $" "Máy tính Windows"


0

Tôi biết chủ đề này đã cũ nhưng tôi muốn cung cấp giải pháp đơn giản phù hợp với tôi.

Lần đầu tiên tôi sao chép tệp .ico vào ổ C: của mình. Sau đó, tôi đã tạo lối tắt trên màn hình của mình và đặt biểu tượng thành tệp ico trên ổ C: của tôi. Sau đó, tôi đã sao chép cả .ico và phím tắt vào một chia sẻ mạng mà người dùng của tôi có quyền truy cập. Khi đó tôi đã viết tệp bó sau để sao chép ico và .url vào màn hình máy tính của người dùng windows 7. Điều này tạo ra lối tắt trên tất cả máy tính để bàn của người dùng và giữ tệp biểu tượng tôi đặt khi tạo lối tắt. Tôi hi vọng điêu nay se giup được ai đo.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause

Nếu đây là cách tiếp cận cần thực hiện, tốt hơn là tạo lối tắt thực tế (.lnk) để nhúng biểu tượng trong đó. Phím tắt đó sau đó có thể được sao chép ở khắp mọi nơi.
LPChip
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.