如何使Windows快捷方式相对于文件夹的位置启动?

80

我有一个游戏使用这个文件结构:

GAME FOLDER
->data
->data->run.bat

我想在游戏文件夹中放置一个指向run.bat的快捷方式,但如果我移动它,或者其他人安装它,它将无法正常工作,因为目标是错误的。有没有一种方法可以使目标和“起始位置”相对于GAME FOLDER?


如果其他人安装了游戏,那会影响现有的快捷方式吗?他们会安装到完全不同的文件夹,但这仍然会破坏现有的链接吗? - SqlRyan
16个回答

1

你可以让批处理文件更改当前的工作目录(CD)。


这也是我推荐的。在至少NT5上,你可以使用%~dp0获取当前运行批处理文件的路径(如果命令处理器扩展已开启,默认情况下是打开的,但你应该在批处理的开头调用setlocal来确保)。 - Anders
这需要更详细地解释。为了在文件移动到其他位置后仍然能够正常工作,批处理文件必须包含一个相对路径。请展示一下cd命令的样子,使用相对路径到子文件夹data。请注意,..\data是不起作用的,它比父级高一个层级,正如Glenn在https://dev59.com/InM_5IYBdhLWcg3w6X1e#29261618上的评论中所讨论的那样。根据Anders的评论,有一些方法可以引用“当前目录的子目录data”? - ToolmakerSteve

0

使用windows命令行中的mklink命令可以创建具有相对路径的链接。

mklink /d \MyDocs \Users\User1\Documents

这可能是创建链接的最佳方式,因为显然,快捷方式的行为可能会有所不同,也许取决于它们的创建方式(UI vs mklink命令)。当我更改根文件夹时,我观察到了一些奇怪的快捷方式行为。

  • 我在Windows 7上测试了一个奇怪的行为。有时候,当目标的根文件夹更改时,链接仍然有效(快捷方式属性会自动更新以反映更改的路径!)。如果“启动”字段存在,则“启动”字段也会自动更新。
  • 我还注意到,第一次更改根路径时,一个链接无法工作(属性显示旧的),但在第二次运行后就可以正常工作了。链接属性会因第一次运行而更新!
  • 我还注意到,至少有两个链接不会更新路径,因此不再起作用。
  • 从链接属性来看,任何字段的格式都没有区别,但行为却不同。

-1
只需对leoj3n的解决方案进行小改进(使控制台窗口消失):不要将%windir%\ system32 \ cmd.exe / c start ""“%CD%\ bat \ bat \ run.bat”放入Windows快捷方式的目标:字段中,您还可以尝试仅添加以下内容:%windir%\system32\cmd.exe /c"%CD%\bat\bat\run.bat",然后在run.bat的命令前还加入start。 这样会使控制台窗口消失,但其他一切保持不变。

-1

最简单的解决方案:> 环境变量 这些小家伙很方便。

如果另一个人需要在他们各自的系统驱动器上安装/解压缩到任何位置(通常是 c:)。

为了演示目的,我们将应用程序称为“test.exe”(可以是任何可执行文件/文件,不必是exe),并将其安装/解压缩到文件夹 MYCOMPANY\MYAPP\ 中。

然后只需创建一个使用 %SystemDrive%\MYCOMPANY\MYAPP\test.exe 作为目标和 %SystemDrive%\MYCOMPANY\MYAPP\ 作为起始位置的快捷方式。

所以现在你想部署它。 使用像“WinRAR”这样的应用程序。

最简单的方法是使用自解压缩zip文件,整洁地打包为“.exe”文件。我会为我的快捷方式使用一个文件,为应用程序使用另一个文件。有一些方法可以制作一个自解压缩的 zip 文件,将不同的文件提取到不同的目录中,但我还没有尝试过。

另一种方法是为快捷方式创建一个自解压文件,将其嵌入应用程序的自解压文件中,然后应用运行一次脚本,因为您知道文件将要去哪里。 等等。

如果您想让安装程序使用自定义安装/解压缩目录,则最好查看NSIS可编写脚本的安装系统。

尝试一下,很有趣,希望我的信息有所帮助。


2
这似乎没有解决相对于快捷方式文件夹工作的简单快捷方式需求。 - Don Cruickshank

-1

'leoj' 提出的方法不允许传递带有空格的参数。 请使用:

    cmd.exe /v /c %CD:~0,2%"%CD:~2%\bat\bat\run.bat" "Par1-1 Par1-2" Par2

这将类似于路径中写的双引号

    C:"\Program Files\anyProgram.exe" "Par1-1 Par1-2" Par2

-2
创建一个相对路径的符号链接。在拥有管理员权限的命令提示符cmd中:
mklink /D SYMLINK_NAME RELATIVE_TARGET_PATH

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