Come creare una scorciatoia da CMD?


76

Come posso creare un file di collegamento ( .lnk) in un altro file o eseguibile, utilizzando le utilità della riga di comando?


1
Non sembra esserci un modo semplice per farlo. Alcune persone hanno strumenti scritti che ti consentono di farlo; eccone uno . Una ricerca di Google per "Windows crea riga di comando scorciatoia" ne rivela altri. (Non ho provato nessuno di loro.)
Keith Thompson,

@iglvzx - Non sono sicuro che la modifica che hai fatto sia corretta. Non credo che Shantanu abbia bisogno di uno script batch: potrebbe essere un modo per creare un * .lnk in un altro file * .exe.
Alfasin,

@alfasin ho aggiunto (.ink file), dato che c'era un po 'di confusione. Ho rivisto la domanda per riflettere il commento di Shantanu. Mentre fornisci un modo per creare "scorciatoie", non risponde a questa domanda specifica.
iglvzx,

1
Utilizzare quanto segue: powershell "$ s = (New-Object -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () "Ovviamente, sostituisci" '% userprofile% \ Desktop \ shortcut.lnk "e" C: \ Windows \ "con il percorso di scelta rapida e il percorso di destinazione, rispettivamente.
cowlinator,

@cowlinator Come scritto, il tuo suggerimento non funziona.
Ploni,

Risposte:


53

Ci sono alcune informazioni molto utili su questo sito: http://ss64.com/nt/shortcut.html

Sembra che ce ne siano alcuni shortcut.exein alcuni kit di risorse che non ho.
Come molti altri siti menzionano, non esiste un modo integrato per farlo da un file batch.

Ma puoi farlo da uno script VB:

Le sezioni opzionali nel VBscript in basso sono commentate:

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

Quindi, se proprio devi farlo, allora puoi fare in modo che il tuo file batch scriva lo script VB sul disco, invocalo e rimuovilo di nuovo. Ad esempio, in questo modo:

@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

L'esecuzione dello script sopra riportato comporta un nuovo collegamento sul mio desktop:
Scorciatoia risultante

Ecco uno snippet più completo di un collaboratore anonimo (aggiornato con una correzione minore):

@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
Correlati: MSDN, Shell Links
iglvzx,

Funziona benissimo per il collegamento a un file. Tuttavia, sto riscontrando uno strano problema nell'usarlo per il collegamento a una cartella, quando la mia variabile Esc_LinkTarget contiene una variabile di ambiente che tenta di ottenere la cartella principale. (Qualcosa come% CD% \ .. non funziona, ma% CD% funziona). Il tipo di destinazione del collegamento diventa un 'File' invece di 'Cartella'
EDM

1
@Edmund Problema interessante. Non ho tempo di esaminarlo, ma presumo che una barra finale possa fare la differenza.
Der Hochstapler,

Nota: se lo usi, SET Esc_LinkTarget=%0devi rimuovere il "daecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
Black

Invece di creare un vbscript per ogni esecuzione, sarebbe stato molto meglio usarlo Wscript.Argumentsper ottenere gli argomenti della riga di comando ... lol
Sancarn

22

Ecco una soluzione simile che usa PowerShell (lo so, probabilmente puoi riscrivere l'intero file batch in PS, ma se vuoi semplicemente 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()"

Potrebbe essere necessario specificare esplicitamente il percorso di PS nel file, ma dovrebbe funzionare. Ci sono alcuni attributi aggiuntivi che puoi manipolare anche attraverso questo oggetto:

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 : se ritieni di avere un modo migliore per farlo , pubblicalo come una nuova risposta (collegandoti a questo, se appropriato).
Scott,


10

Che ne dici di usare il comando mklink? C: \ Windows \ System32> mklink Crea un collegamento simbolico.

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

    /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
Buona idea, ma i collegamenti simbolici sembrano comportarsi in modo leggermente diverso rispetto alle scorciatoie. Se creo un collegamento a una soluzione di Visual Studio, si aprono correttamente tutti i progetti relativamente percorsi. Tuttavia, se apro la stessa soluzione tramite un collegamento simbolico, la directory di lavoro è quella del percorso in cui risiede il collegamento simbolico, non il percorso a cui fa riferimento.
Walter Stabosz,

7

Dopo tutte le discussioni che abbiamo avuto qui, questa è la mia soluzione suggerita: scaricare: http://optimumx.com/download/Shortcut.zip estrarlo sul desktop (ad esempio). Supponiamo ora di voler creare un collegamento per un file chiamato scrum.pdf (anche sul desktop):
1. apri CMD e vai alla cartella del desktop
2. esegui:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

creerà un collegamento chiamato sc.lnk sul desktop che punterà al file originale (scrum.pdf)


Questa non è una scorciatoia; è solo un file batch che invoca un programma specificato.
Keith Thompson,

1
una scorciatoia è qualcosa che si esegue da Windows, dal momento che ha usato CMD nel titolo e ha messo il tag "riga di comando", ho pensato che volesse eseguirlo da CMD. Un file batch è l'equivalente di un "collegamento" di Windows quando si esegue in CMD (DOS Like) ENV.
Alfasin,

2
Dato che ha inserito "collegamento (file .lnk)" nel corpo della domanda, ho pensato che volesse creare un collegamento reale.
Keith Thompson,

1
scusate la chiarezza volevo avere un'icona sul desktop che ho creato in cmd che sarebbe un collegamento a un file exe
Shantanu,

ora che ho finalmente capito (pensatore lento - cosa puoi fare ...) ho cambiato la mia risposta. spero che sia d'aiuto!
Alfasin il

0

Questo programma gratuito ha richiesto la funzionalità http://www.nirsoft.net/utils/nircmd2.html : (esempio da detta pagina Web) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

Il mio esempio da provare: scorciatoia nircmd.exe "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Calcolatrice di Windows"


0

So che questo argomento è vecchio ma volevo fornire la soluzione semplice che ha funzionato per me.

Ho prima copiato il file .ico sul mio disco C :. Quindi ho creato il collegamento sul mio desktop e ho impostato l'icona sul file ico sul mio disco C :. Ho quindi copiato sia il .ico che il collegamento in una condivisione di rete a cui i miei utenti hanno accesso. Una volta lì ho scritto il seguente file batch per copiare ico e .url sul desktop di Windows 7 degli utenti. Questo crea il collegamento sul desktop di tutti gli utenti e mantiene il file icona impostato durante la creazione del collegamento. Spero che questo aiuti qualcuno.

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

Se questo è l'approccio da adottare, è meglio creare il collegamento effettivo (.lnk) che incorpora l'icona in esso. Tale scorciatoia può quindi essere copiata ovunque.
LPChip,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.