如何通过 Windows 符号链接启动应用程序

如何通过 Windows 符号链接启动应用程序

作为一名开发人员,我安装并运行了许多应用程序。要从命令行访问这些应用程序,通常的方法是将应用程序添加到 PATH 环境变量中。这没问题,但会导致 PATH 变得混乱、庞大且难以理解。

我想通过创建一个目录来整理它,例如c:\dev包含所有应用程序的符号链接。我可以使用 mklink 创建符号链接,例如mklink eclipse.exe c:\dev\eclipse\eclipse.exe

对于 Eclipse 示例,当我尝试新的符号链接时,我收到有关配套库的错误。对于其他应用程序(例如 Notepad++),我收到不同的错误。

但是,当我直接在命令行中输入相同的路径时,c:\dev\eclipse\eclipse.exe一切都正常。

因此,符号链接eclipse.exe => c:\dev\eclipse.exe与普通的 不同c:\dev\eclipse.exe。我希望(叹气)并假设(哦!)符号链接的工作方式与直接输入完整路径相同。

换句话说,为什么symlink => c:\dev\eclipse.exe不等同于打字c:\dev\eclipse.exe

有什么办法可以解决这个问题吗?我知道我可以编写一些批处理文件,但我希望避免这种情况(符号链接似乎更干净)。

这是 Windows 的特质吗?还是 Linux 也一样?

答案1

让我用一个例子来说明这个问题。我创建了一个简单的单行批处理文件测试脚本C:\Program Files内容如下:

@echo Batch dir = "%~dp0"

现在,D:\如果我用调用批处理文件C:\Program Files\Test,它会显示:

Batch dir = "C:\Program Files\"

如果我使用修改PATHset path=%path%;C:\Program Files并使用简单的调用批处理文件Test,它会说:

Batch dir = "C:\Program Files\"

最后,如果我使用创建一个符号链接mklink Test.bat "C:\Program Files\Test.bat"并使用一个简单的调用它Test,它会说:

Batch dir = "D:\"

如您所见,在这种情况下,当前工作目录有所不同。难怪您的应用程序会抱怨它们期望在可执行文件的目录中的文件丢失了。

如果您不想向 PATH 添加大量目录,只需添加一个包含每个应用程序批处理文件的目录。

答案2

2 个好的答案已经解释了发生了什么。解决此问题的最佳方法是不要在 c:\dev 文件夹中创建符号链接,而是在 c:\dev 文件夹中创建 .cmd 或 .bat 文件,并在其中放置启动实际文件的指令。

您使用 Eclipse 作为示例,因此我也将使用它。

在 c:\dev 中,创建一个名为 eclipse.bat 的文件,其内容如下:

@echo off
start "c:\dev\eclipse\eclipse.exe %*"

或者如果由于程序无法找到其文件而需要设置路径,请使用:

@echo off
cd /d c:\dev\eclipse
start "eclipse.exe %*"

现在,如果您输入 eclipse,它将首先在当前目录中查找 eclipse.exe。它找不到它,因此它会在当前工作目录中尝试 eclipse.com、.bat 和 .cmd。它找不到它,因此它会以相同的顺序将搜索扩展到路径。它会找到 c:\dev\eclipse.bat 并执行它,这会执行您希望它执行的操作。

注意,我在 .bat 文件中使用了 start,因此在启动应用程序后,您会得到命令提示符。在某些情况下,这是必需的,尤其是在使用支持命令行选项的程序时。

编辑:添加了 %* 以添加参数支持。它是可选的,但这样您就可以使用它。编辑 2:添加了 2 个不同的 .bat 文件,以便您可以看到哪一个最适合您。感谢 DanielB 的建议。

相关内容