【问题标题】:Making a Windows shortcut start relative to where the folder is?使 Windows 快捷方式相对于文件夹所在的位置启动?
【发布时间】:2010-11-13 06:19:03
【问题描述】:

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

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

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

【问题讨论】:

  • 如果其他人安装了游戏,会影响现有的快捷方式吗?他们是否会安装到完全不同的文件夹,但仍会破坏现有链接?

标签: windows shortcuts


【解决方案1】:

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

mklink /D SYMLINK_NAME RELATIVE_TARGET_PATH

【讨论】:

    【解决方案2】:

    '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
    

    【讨论】:

      【解决方案3】:

      我在 Start in 字段中尝试了 %~dp0,它工作正常 在 Windows 10 x64 中

      【讨论】:

        【解决方案4】:
        1. 右键单击您的 /bat/ 文件夹,然后单击 创建快捷方式

          • 在 Windows 7 上,您将在当前目录中获得 bat - Shortcut
          • 在 Windows XP 上,您将收到 Shortcut to bat
        2. 右键单击刚刚创建的快捷方式,然后单击属性

        3. Target(在 Windows 7 上的 Shortcut 标签下)更改为以下内容:

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

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

          %SystemRoot%\system32\SHELL32.dll
          

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

        更多信息:

        请参阅Using the "start" command with parameters passed to the started program 以更好地理解第一个 Target 命令开头的空双引号。

        【讨论】:

        • 有谁知道如何强制cmd.exe /c start 使用当前打开的Windows Explorer 窗口?
        • 另一个注意事项,因为我刚刚处理过它(至少在 XP 上):确保“开始于:”字段为空。
        • 请注意,如果快捷方式设置为以管理员身份运行,这将不起作用:stackoverflow.com/questions/18756671/…
        • 如果我们想要一个数据文件的快捷方式怎么办? (.txt, .ini, .md)
        • 新挑战:我想要一个文件夹的相对快捷方式,但它应该在同一个窗口中打开。我想这是不可能的。
        【解决方案5】:

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

        mklink /d \MyDocs \Users\User1\Documents
        

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

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

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            【讨论】:

            • 这有什么帮助?也就是说,如果有人将所有这些复制到不同的文件夹中,您的 .bat 如何在新位置找到主 .bat?
            【解决方案8】:

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

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

            【讨论】:

            • 嗯,实际上,它会在与 GAME FOLDER 相同级别的数据文件夹中运行 run.bat。例如,如果批处理文件是 C:\Games\GAME FOLDER\data\run.bat,则将该快捷方式放在 GAME FOLDER 中会查找 C:\Games\data\run.bat
            • Windows 是否支持.%windir%\explorer.exe ".\data\run.bat" - 这行得通吗?
            【解决方案9】:

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

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

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

            开始于:%cd%\data

            【讨论】:

            【解决方案10】:

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

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

            请有人确认。

            【讨论】:

              【解决方案11】:

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

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

              【讨论】:

              • 有没有办法让资源管理器在不打开新窗口的情况下浏览到相对路径?
              • 如果你想让它明确,你可以使用 Start In = %CD%
              • Great、empty 或 %CD% 也适用于 Windows 10。如此优雅而简单的解决方案!
              • Empty 或 %CD% 可在本机 Windows 10 资源管理器中使用,但请注意它可能无法在其他文件资源管理器中使用。我在 Adob​​e Bridge 中遇到问题,它喜欢选择与您正在工作的目录无关的自己的工作目录。
              • 它在 windows 10 上不起作用。它说目标框无效
              【解决方案12】:

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

              【讨论】:

                【解决方案13】:

                最简单的解决方案:> Enviroment Variables 方便的小动物。

                如果对方要将任何内容安装/解压缩到他们各自系统驱动器上的任何位置(通常是 c:)。

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

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

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

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

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

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

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

                【讨论】:

                • 这似乎并没有解决对与快捷方式文件夹相关的快捷方式的简单需求。
                【解决方案14】:

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

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

                【讨论】:

                • 我使用这种方式,但是当我删除快捷方式文件然后也删除原始文件时。但是这种方式不合适(删除快捷方式文件时不要删除原始文件)所以
                • @kamlesh0606 我看不出为什么删除 Relative 创建的相对快捷方式应该删除原来的罚款(我试过了)。事实上,快捷方式甚至没有直接引用“原始文件”,它的目标是“%windir%\explorer.exe”。也许,您错误地使用了 Relative 下载页面上也有说明的“mklink”命令并创建了硬链接?这可以解释你所看到的。
                • 这可行,但它基本上是“%windir%\explorer.exe”的快捷方式,它不是真正的相对链接:例如,图标与目标文件的图标不同。
                【解决方案15】:

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

                【讨论】:

                • 这也是我推荐的。至少在 NT5+ 上,您可以使用 %~dp0 获取当前正在运行的批处理文件的路径(如果命令处理器扩展已打开,并且默认情况下是,但您应该在批处理开始时调用 setlocal 以确保)
                • 这需要更详细的解释。为了在文件移动到别处后仍然可以工作,批处理文件必须包含 relative 路径。请显示cd 命令的外观,以及子文件夹data 的相对路径。请注意 ..\data 不起作用,它是一个父级太高,正如 Glenn 对 stackoverflow.com/a/29261618/199364 的评论中所讨论的那样,基于 Anders 的评论,有一些方法可以引用“当前目录的子目录数据”?
                【解决方案16】:

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

                Here is a small primer。您可以通过批处理文件设置此值,或者如果您分享您计划如何创建快捷方式,您也可以通过编程方式设置它。

                【讨论】:

                • 例如,我的记事本快捷方式指向“%SystemRoot%\system32\notepad.exe”,它会自动解析您计算机上的 C:\Windows 等价物。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2015-05-09
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2022-10-14
                • 1970-01-01
                • 2023-02-25
                相关资源
                最近更新 更多