如何从CMD制作快捷方式?


76

如何.lnk使用命令行实用程序创建指向另一个文件或可执行文件的快捷方式文件()?


1
似乎没有任何直接的方法可以做到这一点。有些人编写了可以让您做到的工具。这是其中之一。Google在“ Windows创建快捷方式命令行窗口”中搜索其他内容。(我还没有尝试过。)
基思·汤普森

@iglvzx-我不确定您所做的编辑是否正确。我认为Shantanu不需要批处理脚本-它可以是将* .lnk创建到另一个* .exe文件的任何方式。
alfasin 2012年

我添加了@alfasin (.ink file),因为有些混乱。我修改了问题以反映Shantanu的评论。虽然确实提供了一种制作“快捷方式”的方法,但它无法回答这个特定问题。
iglvzx 2012年

1
使用以下命令:powershell“ $ s =(New-Object -COM WScript.Shell).CreateShortcut('%userprofile%\ Desktop \ shortcut.lnk'); $ s.TargetPath ='C:\ Windows \'; $ s .Save()”显然,分别用快捷方式路径和目标路径替换“'%userprofile%\ Desktop \ shortcut.lnk”和“ C:\ Windows \”。
Cowlinator

@cowlinator键入时,您的建议无效。
波洛尼”

Answers:


53

此站点上有一些非常有用的信息:http : //ss64.com/nt/shortcut.html

似乎shortcut.exe某些资源工具包中有一些我没有的东西。
正如许多其他站点提到的那样,没有从批处理文件执行此操作的内置方法。

但是您可以通过VB脚本来实现:

下面的VBscript中的可选部分已被注释掉:

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

因此,如果确实需要执行此操作,则可以使批处理文件将VB脚本写入磁盘,调用它,然后再次将其删除。例如,如下所示:

@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

运行以上脚本会在我的桌面上产生一个新的快捷方式:
产生的快捷方式

这是匿名贡献者提供的更完整的代码段(已进行了较小的修订):

@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


这非常适用于文件的快捷方式。但是,当我的变量Esc_LinkTarget包含试图获取其父文件夹的环境变量时,我在使用它作为文件夹的快捷方式时遇到了一个奇怪的问题。(像%CD%\ ..之类的东西不起作用,但是%CD%起作用)。快捷方式目标类型变为“文件”而不是“文件夹”
EDM

1
@Edmund有趣的问题。我没有时间研究它,但是我认为斜杠可以有所作为。
Der Hochstapler,2016年

注意:如果使用,SET Esc_LinkTarget=%0则必须"echo oLink.TargetPath = oWS.ExpandEnvironmentStrings^(!Esc_LinkTarget!^)
黑色

与其为每次执行创建一个vbscript,不如使用它Wscript.Arguments来获取命令行参数要好得多……大声笑
Sancarn

22

这是使用Powershell的类似解决方案(我知道,您可能可以在PS中重新编写整个批处理文件,但是如果您只是想完成它™...)

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

您可能必须在文件中明确指定PS的路径,但它应该可以工作。您还可以通过此对象修改一些其他属性:

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:如果您认为自己有更好的方法,只需将其发布为新答案即可(如果需要,请链接至此答案)。
斯科特(Scott)


10

使用mklink命令怎么样?C:\ Windows \ System32> mklink创建符号链接。

MKLINK [[/ D] | [/ H] | [/ J]]连结目标

    /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
这是个好主意,但符号链接的行为似乎与快捷方式有所不同。如果我创建Visual Studio解决方案的快捷方式,它将正确打开所有相对路径的项目。但是,如果我通过符号链接打开相同的解决方案,则工作目录是符号链接所在路径的目录,而不是符号链接所指向的路径。
Walter Stabosz 2014年

7

在我们进行了所有讨论之后,这是我建议的解决方案:下载:http : //optimumx.com/download/Shortcut.zip将 其解压缩到您的桌面上(例如)。现在,假设您要为名为scrum.pdf的文件创建快捷方式(也在桌面上):
1.打开CMD并转到桌面文件夹
2.运行:Shortcut.exe /f:"%USERPROFILE%\Desktop\sc.lnk" /a:c /t:%USERPROFILE%\Desktop\scrum.pdf

它将在您的桌面上创建一个名为sc.lnk的快捷方式,该快捷方式将指向原始文件(scrum.pdf)


这不是捷径。它只是一个调用指定程序的批处理文件。
基思·汤普森

1
快捷方式是您在Windows上运行的东西,因为他在标题中使用了CMD并将标签“命令行”放进去,所以我认为他想从CMD运行它。当您在CMD(类似)环境中运行时,批处理文件等效于Windows“快捷方式”。
alfasin 2012年

2
由于他在问题正文中放入了“快捷方式(.lnk文件)”,因此我认为他想创建一个实际的快捷方式。
基思·汤普森

1
抱歉,为了清楚起见,我想在我的桌面上使用cmd制作一个图标,这将是exe文件的快捷方式
Shantanu 2012年

现在我终于明白了(思想家慢-您能做什么...),我改变了答案。希望能帮助到你!
alfasin 2012年

0

这个免费程序具有必需的功能http://www.nirsoft.net/utils/nircmd2.html:(来自所述网页的示例) "Create a shortcut to Windows calculator under Start Menu->Programs->Calculators nircmd.exe shortcut "f:\winnt\system32\calc.exe" "~$folder.programs$\Calculators" "Windows Calculator"

我自己尝试的示例:nircmd.exe快捷方式“ c:\ windows \ system32 \ calc.exe”“〜$ folder.desktop $”“ Windows计算器”


0

我知道这个话题很老,但是我想提供对我有用的简单解决方案。

我首先将.ico文件复制到了C:驱动器。然后,我在桌面上创建了快捷方式,并将图标设置为C:驱动器上的ico文件。然后,我将.ico和快捷方式都复制到用户可以访问的网络共享中。到达那里后,我编写了以下批处理文件,将ico和.url复制到用户Windows 7桌面。这将在所有用户桌面上创建快捷方式,并保留我在创建快捷方式时设置的图标文件。我希望这可以帮助别人。

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

如果采用这种方法,最好创建实际的快捷方式(.lnk),以将图标嵌入其中。然后可以将该快捷方式复制到任何地方。
LPChip '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.