73

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

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

我想run.bat在 GAME FOLDER 中放一个快捷方式,但如果我移动它,或者其他人安装它,它就不起作用,因为目标是错误的。有没有办法让目标和“开始”相对于游戏文件夹?

4

16 回答 16

79
  1. 右键单击您的 /bat/ 文件夹,然后单击Create Shortcut

    • 在 Windows 7 上,您将进入bat - Shortcut当前目录。
    • 在 Windows XP 上,您将获得Shortcut to bat.
  2. 右键单击您刚刚创建的快捷方式,然后单击Properties

  3. 将目标(在Windows 7 上的快捷方式选项卡下)更改为以下内容:

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

  5. 单击确定。在 Windows 7 上,快捷方式图标将变为 cmd.exe 图标。
  6. 在快捷方式到 .bat 的情况下这可能是可以接受的,但如果您想更改图标,请再次打开快捷方式的属性并单击更改图标...(同样,在Windows 7的快捷方式选项卡下)。此时您可以Browse...查找图标或通过输入来调出默认系统图标列表

    %SystemRoot%\system32\SHELL32.dll
    

    Browse...按钮的左侧并点击Enter。这适用于 Windows 7 和 Windows XP,但由于样式更新,图标会有所不同(但可以识别出相似)。根据快捷方式所在的 Windows 版本,图标有时会相应 更改。

更多信息:

请参阅将“start”命令与传递给启动程序的参数一起使用,以更好地理解第一个Target命令开头的空双引号。

于 2011-11-17T07:58:43.693 回答
41

根据微软的说法,如果您将该'Start In'框留空,脚本将在当前工作目录中运行。我已经在 Windows 7 中尝试过,它似乎工作得很好。

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

于 2013-07-30T15:54:58.853 回答
6

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

基本上,快捷方式可以有一个相对链接,但 Windows 没有提供实际创建的方法。

于 2009-11-17T19:57:22.877 回答
5

如果您可以设置系统变量(例如 %MyGameFolder%),那么您可以在路径和快捷方式中使用它,Windows 会为您填充路径的其余部分(即 %MyGameFolder%\data\MyGame.exe)。

这是一个小底漆。您可以通过批处理文件设置此值,或者如果您分享您计划如何创建快捷方式,您可以通过编程方式设置它。

于 2009-07-23T04:13:46.753 回答
2

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

%windir%\explorer.exe "..\data\run.bat"

于 2015-03-25T16:46:50.820 回答
2

我喜欢leoj3n 的解决方案。它也可以用来设置一个相对的“start in”目录,这是我使用start的 /D 参数所需要的。如果没有 /c 或 /k in 作为cmd的参数,后续的启动命令将不会运行。/c 将在运行命令后立即关闭 shell,而 /k 将保持打开状态(即使在命令完成后)。因此,如果您正在运行的任何内容都符合标准输出并且您需要查看它,请使用 /k。

不幸的是,根据 lnk 文件规范,图标并没有保存在快捷方式中,而是“使用环境变量编码,这使得可以在位置不同但使用环境变量表示的机器之间找到图标”。因此,如果路径正在更改并且您尝试从您指向的可执行文件中获取图标,则它可能无法正确传输。

于 2013-01-26T20:29:31.713 回答
2

我在 Start in 字段中尝试了 %~dp0 ,它在 Windows 10 x64 中运行良好

于 2020-01-30T04:11:09.700 回答
2

我不确定我是否正确,或者我遗漏了什么,但就目前而言(2016-07-11,运行 Win7 Enterprise SP1),LNK 文件在移动甚至更改驱动器号后会自行调整跑到新地方!我在我的 USB 驱动器上创建了一个新的快捷方式,并尝试以相对位置保持不变的方式移动快捷方式及其目标,然后我更改了驱动器号。该快捷方式在这两种情况下都有效,并且在我双击后调整了目标字段。

看起来微软已经在过去的更新中解决了这个问题。

请有人确认这一点。

于 2016-07-11T14:17:50.217 回答
2

在阅读了几个答案后,我决定用一个简单的解决方案来做到这一点:我没有使用快捷方式,而是制作了一个 .bat,只有一行来调用主 .bat ,它就像我想要的那样工作。

于 2016-07-05T15:56:26.773 回答
1

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

于 2009-07-23T04:21:10.903 回答
1

按照您的方式制作快捷方式后,在属性中设置以下内容:

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

  • /k如果您不希望提示在运行后保持打开状态,请删除。

开始于:%cd%\data

于 2016-08-01T09:34:46.443 回答
0

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

mklink /d \MyDocs \Users\User1\Documents

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

  • 我测试过的 Windows 7 上有一个奇怪的行为。有时,当目标的根文件夹更改时,链接仍然有效(快捷方式属性会自动更新以反映更改的路径!)。如果“开始”字段存在,它也会自动更新。
  • 我还注意到第一次更改根路径时一个链接不起作用(属性显示旧),但它在第二次之后以及之后的每次都起作用。链接属性在第一次运行后得到更新!
  • 我还注意到至少有两个链接,它不会更新路径并且不再有效。
  • 从链接属性来看,任何字段的格式都没有差异,但行为不同。
于 2018-05-17T19:29:27.033 回答
-1

最简单的解决方案:> 环境变量 方便的小动物。

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

出于演示目的,调用我们的应用程序“test.exe”(可以是任何可执行文件/文件,不必是 exe),它将被安装/解压缩到文件夹 MYCOMPANY\MYAPP\

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

所以现在你想部署它。使用“WinRAR”之类的应用程序。

简单的方法是使用自解压 zip 文件,整齐地打包为“.exe”,我将一个用于我的快捷方式,另一个用于应用程序。有办法制作一个自解压 zip 文件,将不同的文件解压到不同的目录,但我还没有玩过。

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

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

玩起来很有趣,希望我的信息有所帮助。

于 2013-05-23T21:18:55.707 回答
-1

建立相对路径的符号链接。在命令提示符下cmd(具有管理员权限):

mklink /D SYMLINK_NAME RELATIVE_TARGET_PATH
于 2021-12-18T21:24:12.340 回答
-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
于 2020-05-31T18:22:18.573 回答
-1

只是对 leoj3n 解决方案的一个小改进(使控制台窗口消失):您也可以尝试仅添加以下内容,而不是放入 Windows 快捷方式%windir%\system32\cmd.exe /c start "" "%CD%\bat\bat\run.bat"Target:%windir%\system32\cmd.exe /c "%CD%\bat\bat\run.bat"字段,然后start在您的命令前面添加run.bat. 这将使控制台窗口消失,但其他一切都保持不变。

于 2015-09-27T19:27:32.873 回答