Windows CMD:如何创建可执行文件的符号链接?

20

我的目标是将一些可执行文件添加到我的PATH路径中(例如chrome),这样我就可以调用它们。

> chrome

从命令提示符中输入,它将启动Chrome。

我知道我可以将Chrome所在目录添加到我的路径中(set PATH=%PATH%<chrome_path_here>;),但由于我有一些可执行文件想要添加,我更愿意创建一个新的bin目录,其中包含指向实际可执行文件的符号链接,并将该单个目录添加到我的路径中。

Chrome可执行文件位于

C:\Program Files (x86)\Google\Chrome\Application\chrome.exe

所以我尝试了一下

> mklink chrome.exe "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe"

这成功地为文件创建了符号链接(输出中已经说明,在使用 > dir 命令检查后也是如此)。我知道我的 PATH 设置正确,因为当我运行 > where chrome 时,它找到了我的新符号链接。

然而,当我尝试使用我的新链接执行 Chrome 时,没有任何反应。一个新的空窗口应该出现,但是没有任何反应。在命令提示符中也没有错误消息。

我做错了什么?我对 Windows 中的符号链接有误解吗?这是我在 Linux 上一直使用的方法,但我对 Windows Cmd 不熟悉。

谢谢!

2个回答

17

大多数程序只能从其安装位置运行,如果您尝试从符号链接运行它,则会出现这种情况。

在该文件夹中创建与程序名称匹配的CMD / BAT文件将更加容易,这些文件将从您想要的位置启动程序:

REM chrome.cmd
start /b cmd /c "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" %*

很酷,谢谢提供信息!我把那段代码放进了一个叫做'chrome.bat'的文件里,现在它可以工作了。 - Nathan Wallace
7
另一种选择是使用快捷方式,但您需要将“.lnk”添加到PATHEXT变量中。 - Harry Johnston
3
如果你在CMD/BAT文件的开头添加@echo off,当你执行它时,文件中的命令将不会被回显。 - Laura
大多数程序只能从安装位置运行,这是一个大胆的说法。实际上,有很多自包含的可执行文件可以从复制或链接到的任何位置正常运行。 - Manuzor

10
使用Windows 7,我确认符号链接不起作用,并像原问题中所述被忽略。正如Harry在他的评论中所述,快捷方式是可行的,对我来说比为每个新命令编写单独脚本要简单得多。他指出需要将.lnk添加到PATHEXT变量中才能实现这一点。我证实这确实有效,通过将.lnk添加到PATHEXT,我可以输入快捷方式的名称部分来运行命令。例如,如果我的快捷方式名为“sublime.lnk”,并且PATHEXT包括.lnk,则可以使用简单的命令“sublime”执行该链接。很好!作为另一种选择,我发现如果在CMD提示符下键入快捷方式的完整名称(包括.lnk),而无需修改PATHEXT也可以。例如,我在%HOMEPATH%/bin下创建了一个名为“sublime.lnk”的快捷方式,指向“C:\Program Files\Sublime Text 2\sublime_text.exe”。
现在通过将%HOMEPATH%\bin放入%PATH%中,我可以通过命令"sublime.lnk"运行sublime。
以上两种方法是我知道的从CMD提示符中访问Windows文件系统中各种命令的最佳方式。虽然我不是Windows专家,但欢迎更好或更标准化的解决此问题的方法。

附注:我刚刚通过艰苦的方式发现,您需要确保以这种方式使用的任何快捷方式的“起始位置”属性被清空,否则您的程序将无法在您从快捷方式调用的目录中启动。


P.P.S.:另外,我发现如何在CMD会话登录的目录上运行Windows资源管理器(或其替代品):start .


1
2个问题:(1)这种方法是否允许将开关转换为命令?(2)使用此方法是否存在任何注意事项?... 奇怪的是,对我来说,在Windows 10版本2004上,在我的bin文件夹中添加一个符号链接到exe似乎可以工作。也就是说,我可以运行exe作为没有扩展名的命令(它被终端识别),但如果我通过完整路径运行exe,则会出现缺少模块和其他东西的投诉。 - Henrik
1
@Henrik,感谢您的关注。正如我在回答中所述,我不是Windows专家。因此,请谨慎应用我的观察结果。我发现使用这种方法命令行选项确实有效。我只是猜测,但如果一个命令通过符号链接表现不同,那么它可能会从命令行提取其执行路径,并使用该信息来定位其他组件(如您所说的“模块和其他东西”)。 - CODE-REaD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接