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

80

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

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

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


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

85
  1. 右键点击你的 /bat/ 文件夹,选择 Create Shortcut
    • 在 Windows 7 上,你将在当前目录中得到 bat - Shortcut
    • 在 Windows XP 上,你将得到 Shortcut to bat
  2. 右键点击你刚创建的快捷方式,选择 Properties

  3. 更改 Target(在 Windows 7 的 Shortcut 选项卡下)为以下内容:

    %windir%\system32\cmd.exe /c start "" "%CD%\bat\bat\run.bat"
    
  4. 确保起始位置为空。这会导致它在当前目录中启动。

  5. 单击“确定”按钮。在Windows 7中,快捷方式图标将更改为cmd.exe图标。
  6. 对于快捷方式到.bat文件的情况,这可能是可以接受的。但如果你想要更改图标,请再次打开快捷方式属性,然后单击更改图标...(同样是在Windows 7下的快捷方式选项卡下)。此时,你可以通过浏览...寻找一个图标,或者输入一系列默认系统图标。

  7. %SystemRoot%\system32\SHELL32.dll
    

    在“浏览...”按钮左侧,按下Enter键。 在Windows 7和Windows XP上都可以使用此方法,但由于样式更新(但仍然相似),图标可能会有所不同。根据Windows的版本,快捷方式所在的图标有时会相应更改。

    更多信息:

    请参见使用带参数的“start”命令启动程序以更好地理解第一个Target命令前面的空双引号。


2
有人知道如何强制 cmd.exe /c start 使用当前打开的 Windows资源管理器 窗口吗? - leoj
1
另外一点需要注意,因为我刚刚处理过它(至少在XP上):确保“起始于:”字段为空。 - chezy525
2
请注意,如果将快捷方式设置为以管理员身份运行,则此方法无效:https://dev59.com/PGMl5IYBdhLWcg3wBzDy - Sphinxxx
2
如果我们想要一个数据文件的快捷方式怎么办?(.txt.ini.md - Stevoisiak
如果您想将.bat文件作为普通用户运行,则此解决方案有效,但是如果您按照此问题中的说明告诉快捷方式以管理员身份运行,则无法正常工作。遗憾的是,我没有解决此问题的方法。 - blackandorangecat
显示剩余3条评论

46

据微软表示,如果留空'Start In'框,则脚本将在当前工作目录中运行。我已在Windows 7上尝试过,并且似乎可以正常运行。

来源:http://support.microsoft.com/kb/283065


有没有办法让资源管理器在不打开新窗口的情况下浏览到相对路径? - mythofechelon
1
如果您想要明确表示,可以使用“Start In = %CD%”。 - Bernardo Dal Corno
1
太棒了,在Windows 10中也可以使用空的或%CD%。如此优雅而简单的解决方案! - Wouter
一个快捷方式的“当前工作目录”是什么?是快捷方式文件所在的目录吗?还是File Explorer启动的目录? - Lii
6
无法在Windows 10上运行。它显示目标框不合法。 - Millemila
显示剩余2条评论

6

尝试使用Relative(一款Windows命令行应用程序)。

基本上,快捷方式可以有相对链接,但是Windows没有实际制作相对链接的方法。


我使用这种方式,但当我删除快捷方式文件,然后再删除原始文件时,这种方式是不正确的(删除快捷方式文件时不要删除原始文件)。 - Kamlesh
@kamlesh0606 我看不出为什么删除_Relative_创建的相对快捷方式会删除原始文件(我已经尝试过)。实际上,该快捷方式甚至没有直接引用“原始文件”,而是针对“%windir%\explorer.exe”进行定位。也许,您错误地使用了“mklink”命令,该命令也在_Relative_下载页面上有解释,并创建了一个硬链接?这可能可以解释您所看到的情况。 - bers
这个可以用,但它基本上只是一个指向"%windir%\explorer.exe"的快捷方式,不是真正的相对链接:例如,图标与目标文件不同。 - bers

6
如果你可以设置一个系统变量(例如%MyGameFolder%),那么你就可以在路径和快捷方式中使用它,Windows会为你填充其余的路径(也就是说,%MyGameFolder%\data\MyGame.exe)。 这里有一个小入门介绍。你可以通过批处理文件来设置这个值,或者如果你分享了你计划如何创建你的快捷方式,你可能可以以编程方式设置它。

例如,我的记事本快捷方式指向“%SystemRoot%\system32\notepad.exe”,它会自动解析您计算机上等效于C:\Windows的位置。 - SqlRyan

4
您可以通过更改文件路径手动创建一个相对快捷方式。 首先,在通常的上下文菜单中,为您的文件创建Windows的新快捷方式,然后在属性->文件位置中: %windir%\explorer.exe "..\data\run.bat"

1
实际上,这将在与GAME FOLDER相同级别的数据文件夹中运行run.bat。例如,如果批处理文件位于C:\ Games \ GAME FOLDER \ data \ run.bat,则将该快捷方式放入GAME FOLDER中将查找C:\ Games \ data \ run.bat。 - GlennFromIowa
1
Windows支持“.”吗?%windir%\explorer.exe ".\data\run.bat" - 这样可以工作吗? - ToolmakerSteve

2
我喜欢leoj3n的解决方案。它还可以用于设置相对的“起始目录”,这正是我需要使用start的/D参数来实现的。如果在cmd中没有/c或/k作为参数,后续的start命令将无法运行。/c会在运行命令后立即关闭shell,而/k则会保持其打开状态(即使命令执行完毕)。因此,如果您运行的任何内容都会输出到标准输出并且您需要查看它,请使用/k。
不幸的是,根据 lnk 文件 specification,图标并没有保存在快捷方式中,而是“使用环境变量编码,这使得可以在路径不同但使用环境变量表示的机器上找到图标”。因此,如果路径在改变并且您试图从指向的可执行文件中获取图标,则可能无法正确传输。

2

在阅读了几个答案后,我决定采用简单的解决方案:不使用快捷方式,而是创建一个只有一行命令的 .bat 文件来调用主要的 .bat 文件,这样就可以按照我想要的方式工作。


这有什么帮助呢?也就是说,如果有人将所有内容复制到另一个文件夹中,你的 .bat 文件如何在新位置找到主 .bat 文件? - ToolmakerSteve

2

按照您所做的方式创建快捷方式后,在属性中设置以下内容:

目标:%comspec% /k "data\run.bat"

  • 如果您不想在运行后保持提示打开,请删除 /k

起始位置:%cd%\data


你真的可以在“启动位置”框中使用%CD%吗?这已经被证明是有问题的。以下是一些替代方案:https://serverfault.com/a/863325/184613 - JonathanDavidArndt

2
我不确定我是否正确,或者我是否遗漏了什么,但截至目前(2016-07-11,运行Win7 Enterprise SP1),LNK文件在移动或甚至更改驱动器字母后会自适应! 我在我的USB驱动器上创建了一个新的快捷方式,并尝试以相对位置不变的方式移动快捷方式及其目标,然后更改了驱动器字母。 快捷方式在两种情况下都有效,并且在我双击它后,目标字段被适应了。 看起来微软已经在过去的更新中解决了这个问题。 请有人确认一下。

2

我在“启动”选项中使用了“%~dp0”命令,并且在Windows 10 x64系统上运行良好。


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