Jak zrobić skrót z CMD?

76

Jak mogę utworzyć plik skrótu ( .lnk) do innego pliku lub pliku wykonywalnego za pomocą narzędzi wiersza poleceń?

Shantanu
źródło
1
Wydaje się, że nie ma prostego sposobu na zrobienie tego. Niektórzy pisali narzędzia, które ci to umożliwiają; oto jeden z nich . Wyszukiwanie w Google „wiersza polecenia systemu Windows do tworzenia skrótów” pokazuje inne. (Nie próbowałem żadnego z nich.)
Keith Thompson
@iglvzx - Nie jestem pewien, czy dokonana edycja jest poprawna. Nie sądzę, że Shantanu potrzebuje skryptu wsadowego - może to być dowolny sposób utworzenia pliku * .lnk do innego pliku * .exe.
alfasin
@alfasin dodałem (.ink file), ponieważ było trochę zamieszania. Poprawiłem pytanie, aby odzwierciedlić komentarz Shantanu. Chociaż udostępniasz sposób tworzenia „skrótów”, nie odpowiada na to konkretne pytanie.
iglvzx
1
Użyj następujących poleceń: powershell "$ s = (New-Object -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () „Oczywiście zamień” „% userprofile% \ Desktop \ shortcut.lnk” i „C: \ Windows \” odpowiednio na ścieżkę skrótu i ​​ścieżkę docelową.
cowlinator
@cowlinator Jak napisano, Twoja sugestia nie działa.
Ploni

Odpowiedzi:

53

Istnieje kilka bardzo przydatnych informacji na tej stronie: http://ss64.com/nt/shortcut.html

Wygląda na to, że shortcut.exew zestawie zasobów jest coś, czego nie mam.
Jak wspomina wiele innych witryn, nie ma wbudowanego sposobu, aby to zrobić z pliku wsadowego.

Ale możesz to zrobić ze skryptu VB:

Opcjonalne sekcje w skrypcie VB zostały skomentowane:

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

Tak więc, jeśli naprawdę musisz to zrobić, możesz zmusić plik wsadowy do napisania skryptu VB na dysk, wywołania go, a następnie usunięcia go ponownie. Na przykład tak:

@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

Uruchomienie powyższego skryptu powoduje powstanie nowego skrótu na moim pulpicie:
Wynikowy skrót

Oto bardziej kompletny fragment anonimowego autora (zaktualizowany drobną poprawką):

@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
źródło
1
Powiązane: MSDN, Shell Links
iglvzx
Działa to doskonale jako skrót do pliku. Mam jednak dziwny problem z używaniem go jako skrótu do folderu, gdy moja zmienna Esc_LinkTarget zawiera zmienną środowiskową próbującą uzyskać folder nadrzędny. (Coś w stylu% CD% \ .. nie działa, ale działa% CD%). Typem docelowym skrótu jest „Plik” zamiast „Folder”
EDM
1
@Edmund Ciekawy problem. Nie mam czasu, żeby się tym przyjrzeć, ale zakładam, że ukośnik może coś zmienić.
Der Hochstapler,
Uwaga: jeśli używasz SET Esc_LinkTarget=%0, musisz usunąć "zecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Black
Zamiast tworzyć vbscript dla każdego wykonania, znacznie lepiej byłoby użyć Wscript.Argumentsargumentów z wiersza poleceń ... lol
Sancarn
22

Oto podobne rozwiązanie przy użyciu programu PowerShell (wiem, że prawdopodobnie możesz ponownie napisać cały plik wsadowy w PS, ale jeśli chcesz tylko go pobrać ...)

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

Być może będziesz musiał dokładnie określić ścieżkę do PS w swoim pliku, ale powinna ona działać. Istnieje również kilka dodatkowych atrybutów, które możesz zmieniać w tym obiekcie:

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
źródło
Trix : Jeśli uważasz, że masz na to lepszy sposób , po prostu opublikuj to jako nową odpowiedź (w razie potrzeby link do tego).
Scott
17

Oprócz shortcut.exe, możesz także użyć wersji NirCmd z wiersza poleceń, aby utworzyć skrót. http://nircmd.nirsoft.net/shortcut.html

Podczas gdy pętla
źródło
11
Polecam prawie wszystko od NirSoft, jest to najlepszy zestaw narzędzi dla maniaków
Ten Brazylijczyk
10

Co powiesz na użycie polecenia mklink? C: \ Windows \ System32> mklink Tworzy dowiązanie symboliczne.

MKLINK [[/ D] | [/ H] | [/ J]] Link docelowy

    /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.
Mikrofon
źródło
10
Dobry pomysł, ale dowiązania symboliczne wydają się zachowywać nieco inaczej niż skróty. Jeśli utworzę skrót do rozwiązania Visual Studio, otworzy ono poprawnie wszystkie projekty o względnie ścieżkach. Jeśli jednak otworzę to samo rozwiązanie za pomocą dowiązania symbolicznego, katalogiem roboczym będzie ścieżka, w której znajduje się dowiązanie symboliczne, a nie ścieżka, do której się odnosi.
Walter Stabosz
7

Po wszystkich dyskusjach, które tutaj przeprowadziliśmy, oto moje sugerowane rozwiązanie: pobierz: http://optimumx.com/download/Shortcut.zip rozpakuj go na pulpicie (na przykład). Załóżmy teraz, że chcesz utworzyć skrót do pliku o nazwie scrum.pdf (również na pulpicie):
1. otwórz CMD i przejdź do folderu pulpitu
2. uruchom:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

utworzy skrót o nazwie sc.lnk na pulpicie, który będzie wskazywał na oryginalny plik (scrum.pdf)

alfasin
źródło
To nie jest skrót; to tylko plik wsadowy, który wywołuje określony program.
Keith Thompson,
1
skrót to coś, co uruchamiasz z systemu Windows, ponieważ użył CMD w tytule i wstawił tag „linia poleceń”. Zakładałem, że chce uruchomić go z CMD. Plik wsadowy jest odpowiednikiem „skrótu” systemu Windows podczas uruchamiania w środowisku CMD (dos like) env.
alfasin
2
Ponieważ w treści pytania umieścił „skrót (plik .lnk)”, założyłem, że chce stworzyć rzeczywisty skrót.
Keith Thompson,
1
przepraszam za jasność Chciałem mieć ikonę na pulpicie, którą wykonałem w cmd, który byłby skrótem do pliku exe
Shantanu
teraz, kiedy wreszcie zrozumiałem (powolny myśliciel - co możesz zrobić ...) Zmieniłem odpowiedź. mam nadzieję, że to pomoże!
alfasin
0

Ten darmowy program wymagał funkcjonalności http://www.nirsoft.net/utils/nircmd2.html : (przykład ze wspomnianej strony) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

Własna próbka do wypróbowania: skrót nircmd.exe „c: \ windows \ system32 \ calc.exe” „~ $ folder.desktop $” „Kalkulator Windows”

Goldie
źródło
0

Wiem, że ten temat jest stary, ale chciałem przedstawić proste rozwiązanie, które mi się udało.

Najpierw skopiowałem plik .ico na dysk C:. Następnie utworzyłem skrót na pulpicie i ustawiłem ikonę na plik ico na moim dysku C:. Następnie skopiowałem .ico i skrót do udziału sieciowego, do którego mają dostęp moi użytkownicy. Tam napisałem następujący plik wsadowy, aby skopiować ico i .url na pulpit systemu Windows 7 użytkowników. Spowoduje to utworzenie skrótu na pulpicie wszystkich użytkowników i zachowanie pliku ikony ustawionego podczas tworzenia skrótu. Mam nadzieję, że to komuś pomoże.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause
Michele
źródło
Jeśli takie jest podejście, lepiej jest utworzyć rzeczywisty skrót (.lnk), który osadza w nim ikonę. Ten skrót można następnie skopiować wszędzie.
LPChip