Como fazer um atalho do CMD?

76

Como posso criar um arquivo de atalho ( .lnk) para outro arquivo ou executável, usando os utilitários de linha de comando?

Shantanu
fonte
11
Não parece haver nenhuma maneira simples de fazer isso. Algumas pessoas têm ferramentas escritas que permitem fazer isso; aqui está um deles . Uma pesquisa no Google por "janelas criar linha de comando de atalho" mostra algumas outras. (Eu não tentei nenhuma delas.)
Keith Thompson
@iglvzx - Não sei se a edição que você fez está correta. Eu não acho que o Shantanu precise de um script em lote - poderia ser uma maneira de criar um * .lnk para outro arquivo * .exe.
Alfasin
@ alfasin eu adicionei (.ink file), como houve alguma confusão. Revisei a pergunta para refletir o comentário de Shantanu. Embora você forneça uma maneira de criar 'atalhos', ele não responde a essa pergunta específica.
21412 iglvzx
11
Use o seguinte: powershell "$ s = (Novo-Objeto -COM WScript.Shell) .CreateShortcut ('% userprofile% \ Desktop \ shortcut.lnk'); $ s.TargetPath = 'C: \ Windows \'; $ s .Save () "Obviamente, substitua" '% userprofile% \ Desktop \ shortcut.lnk "e" C: \ Windows \ "pelo seu caminho de atalho e caminho de destino, respectivamente.
cowlinator
@ cowlinator Conforme digitado, sua sugestão não funciona.
Ploni 23/10

Respostas:

53

Há algumas informações muito úteis neste site: http://ss64.com/nt/shortcut.html

Parece que há alguns shortcut.exeem algum kit de recursos que eu não tenho.
Como muitos outros sites mencionam, não há uma maneira integrada de fazer isso a partir de um arquivo em lotes.

Mas você pode fazer isso a partir de um script VB:

As seções opcionais no VBscript abaixo são comentadas:

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

Portanto, se você realmente precisar fazer isso, poderá fazer com que seu arquivo em lote grave o script VB em disco, invoque-o e remova-o novamente. Por exemplo, assim:

@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

A execução do script acima resulta em um novo atalho na minha área de trabalho:
Atalho resultante

Aqui está um trecho mais completo de um colaborador anônimo (atualizado com uma correção menor):

@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
fonte
11
Relacionado: MSDN, Links de shell
iglvzx
Isso funciona muito bem para atalhos para um arquivo. No entanto, estou tendo um problema estranho usando-o como atalho para uma pasta, quando minha variável Esc_LinkTarget contém uma variável de ambiente tentando obter sua pasta pai. (Algo como% CD% \ .. não funciona, mas% CD% funciona). O tipo de destino do atalho se torna um 'Arquivo' em vez de 'Pasta'
EDM
11
@ Edmund Problema interessante. Não tenho tempo para investigar, mas presumo que uma barra final possa fazer a diferença.
Der Hochstapler
Nota: se você usar SET Esc_LinkTarget=%0, você deve remover o arquivo "deecho oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
preto
Em vez de criar um vbscript para cada execução, seria muito melhor usar Wscript.Argumentsos argumentos da linha de comando ... lol
Sancarn
22

Aqui está uma solução semelhante usando o PowerShell (eu sei, você provavelmente pode reescrever todo o arquivo em lotes no PS, mas se você quiser apenas o 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()"

Pode ser necessário especificar explicitamente o caminho para o PS no seu arquivo, mas deve funcionar. Existem alguns atributos adicionais que você pode alternar com esse objeto também:

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
fonte
Trix : Se você acredita que tem uma maneira melhor de fazer isso , basta publicá-la como uma nova resposta (vinculando a esta, se apropriado).
Scott
17

Além do shortcut.exe, você também pode usar a versão da linha de comando do NirCmd para criar o atalho. http://nircmd.nirsoft.net/shortcut.html

Enquanto Loop
fonte
11
Eu recomendo quase tudo de NirSoft, é o conjunto de ferramentas geek definitivo
That Guy Brasileiro
10

Que tal usar o comando mklink? C: \ Windows \ System32> mklink Cria um link simbólico.

MKLINK [[/ D] | [/ H] [/ J]] Destino do link

    /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
fonte
10
Boa ideia, mas os links simbólicos parecem se comportar de maneira um pouco diferente dos atalhos. Se eu criar um atalho para uma solução do Visual Studio, ele abrirá todos os projetos relativamente encaminhados corretamente. No entanto, se eu abrir a mesma solução por meio de um link simbólico, o diretório de trabalho será o caminho no qual o link simbólico reside, não o caminho ao qual ele se refere.
Walter Stabosz
7

Depois de todas as discussões que tivemos aqui, esta é minha solução sugerida: faça o download: http://optimumx.com/download/Shortcut.zip e extraia-o na área de trabalho (por exemplo). Agora, suponha que você queira criar um atalho para um arquivo chamado scrum.pdf (também na área de trabalho):
1. abra o CMD e vá para a pasta da área de trabalho
2. execute:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

ele criará um atalho chamado sc.lnk na área de trabalho que apontará para o arquivo original (scrum.pdf)

alfasin
fonte
Isso não é um atalho; é apenas um arquivo em lotes que chama um programa especificado.
21412 Keith Thompson
11
um atalho é algo que você executa no Windows, já que ele usou o CMD no título e colocou a tag "linha de comando". Supus que ele deseja executá-lo no CMD. Um arquivo em lotes é equivalente a um "atalho" do Windows quando você executa no CMD (dos like) env.
Alfasin
2
Como ele colocou "atalho (arquivo .lnk)" no corpo da pergunta, presumi que ele deseja criar um atalho real.
21412 Keith Thompson
11
pena de clareza eu queria ter um ícone no meu desktop que eu fiz no cmd que seria um atalho para um arquivo exe
Shantanu
agora que finalmente entendi (pensador lento - o que você pode fazer ...) mudei minha resposta. espero que ajude!
Alfasin
0

Este programa gratuito exigiu a funcionalidade http://www.nirsoft.net/utils/nircmd2.html : (exemplo da referida página da 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"

Minha própria amostra para tentar: atalho nircmd.exe "c: \ windows \ system32 \ calc.exe" "~ $ folder.desktop $" "Calculadora do Windows"

goldie
fonte
0

Eu sei que este tópico é antigo, mas eu queria fornecer a solução simples que funcionou para mim.

Copiei o arquivo .ico pela primeira vez na minha unidade C :. Em seguida, criei o atalho na área de trabalho e defina o ícone para o arquivo ico na minha unidade C :. Em seguida, copiei o .ico e o atalho para um compartilhamento de rede ao qual meus usuários têm acesso. Uma vez lá, escrevi o seguinte arquivo em lotes para copiar o ico e .url para a área de trabalho do Windows 7 dos usuários. Isso cria o atalho na área de trabalho de todos os usuários e mantém o arquivo de ícone definido ao criar o atalho. Espero que isso ajude alguém.

@echo off
Copy "\\sharename\folder\icon.ico" "C:\"
pause
copy "\\sharename\folder\shortcut.url" "C:\Users\All Users\Desktop"
pause
Michele
fonte
Se essa é a abordagem a ser adotada, é melhor criar o atalho real (.lnk) que incorpora o ícone nele. Esse atalho pode ser copiado em qualquer lugar.
LPChip 2/16