使Windows快捷方式相对于文件夹在哪里启动?


68

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

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

我想run.bat在GAME FOLDER中放一个快捷方式,但是如果我移动它或其他人安装了它,它将不会起作用,因为目标是错误的。有没有办法使目标相对于GOLD FOLDER并“开始”?


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

Answers:


72
  1. 右键点击/ bat /文件夹,然后点击创建快捷方式

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

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

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

  5. 单击确定。在Windows 7上,快捷方式图标将更改为cmd.exe图标。
  6. 快捷方式指向.bat时,这可能是可以接受的,但如果要更改图标,请再次打开快捷方式的属性,然后单击“更改图标...”(同样,在Windows 7的“快捷方式”选项卡下)。此时,您可以浏览...查找图标,或通过输入以下内容调出默认系统图标列表

    %SystemRoot%\system32\SHELL32.dll
    

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

更多信息:

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


2
有谁知道如何强制cmd.exe /c start使用当前打开的Windows资源管理器窗口?
leoj

1
另一个注意事项,因为我刚刚处理过(至少在XP上如此):请确保“开始于:”字段为空。
chezy525

2
请注意,如果该快捷方式设置为以管理员身份运行,这将不起作用:stackoverflow.com/questions/18756671/...
Sphinxxx

2
如果我们想要数据文件的快捷方式怎么办?(.txt.ini.md
Stevoisiak

新挑战:我想要相对快捷的文件夹,但是它应该在同一窗口中打开。我想那是不可能的。
法比安·罗林(FabianRöling)

38

根据Microsoft的说法,如果将此'Start In'框保留为空,则脚本将在当前工作目录中运行。我已经在Windows 7中尝试过了,它似乎工作正常。

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


有没有办法让资源管理器浏览到相对路径而无需打开新窗口?
mythofechelon,2015年

而且,如果您想使其明确,则可以使用Start In =%CD%
Bernardo Dal Corno,

1
Great,empty或%CD%也可以在Windows 10中使用。如此优雅而简单的解决方案!
Wouter

空白或%CD%在本机Windows 10资源管理器中均可使用,但请注意,它可能在其他文件资源管理器中无效。我有在Adobe Bridge惹的祸喜欢选择这无关你在工作的一个自己的工作目录。
加尔文的嗜好

3
它在Windows 10上不起作用。它说目标盒无效
Millemila

7

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

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


我使用这种方式,但是当我删除快捷方式文件,然后再删除原始文件时。但这是不合适的方式(删除快捷方式文件时不要删除原始文件)所以
Kamlesh 2012年

@ kamlesh0606我看不出删除Relative创建的相对快捷方式应该删除原来的罚款的理由(我已经尝试过了)。实际上,快捷方式甚至没有直接引用“原始文件”,而是以“%windir%\ explorer.exe”为目标。也许是由于错误,您使用了“ mklink”命令,该命令也在“相对下载”页面上进行了说明,并创建了一个硬链接?那可以解释您所看到的。
bers

该方法有效,但是它基本上是“%windir%\ explorer.exe”的快捷方式,它不是真正的相对链接:例如,图标与目标文件的图标不同。
bers

4

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

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


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

3

您可以通过更改文件路径来手动创建相对快捷方式。首先,在通常的上下文菜单中,为文件并在属性->文件位置中创建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

3

我喜欢leoj3n的解决方案。它也可以用来设置相对的“开始于”目录,这是我通过使用start的/ D参数所需要的。如果没有/ c或/ k作为cmd的参数,则后续的启动命令将无法运行。/ c将在运行命令后立即关闭外壳程序,而/ k将使其保持打开状态(即使在执行命令之后)。因此,如果您正在运行的任何东西都需要标准化,并且需要查看它,请使用/ k。

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


2

在使用完快捷方式后,在“属性”中设置以下内容:

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

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

开始于: %cd%\data


您真的可以在“开始于”框中使用%CD%吗?事实证明这很麻烦。以下是一些替代方法:serverfault.com/a/863325/184613
JonathanDavidArndt,

2

在阅读了几个答案之后,我决定采用一个简单的解决方案:代替快捷方式,我制作了一个只有一行的.bat来调用主.bat,它的工作方式与我想要的一样。


这有什么帮助?也就是说,如果有人将所有这些都复制到其他文件夹,那么您的.bat如何在新位置找到主.bat?
ToolmakerSteve

1

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

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

请有人确认。


1

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

mklink /d \MyDocs \Users\User1\Documents

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

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

1

我在“开始于”字段中尝试了%〜dp0,它在Windows 10 x64中工作正常


0

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


这也是我建议的。至少在NT5 +上,您可以使用%〜dp0获得当前正在运行的批处理文件的路径(如果打开了命令处理器扩展名,并且默认情况下为,但是您应在批处理开始时调用setlocal来确保)
Anders

这需要更详细地说明。为了在文件移动到其他位置后仍能正常工作,批处理文件必须包含相对路径。请显示cd命令的样子,并带有子文件夹的相对路径data。请注意..\data,这是行不通的,因为父级太高,如Glenn在stackoverflow.com/a/29261618/199364的评论( 基于Anders的评论)中所讨论的,有某种方式可以引用“当前目录的子目录数据”?
ToolmakerSteve

0

最简单的解决方案:> 环境变量 方便使用。

如果对方要在其各自的系统驱动器上安装/解压缩任何文件(通常为c :)。

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

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

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

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

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

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

玩的很有趣,希望我的信息对您有所帮助。


2
这似乎无法解决对相对于快捷方式文件夹起作用的快捷方式的简单需求。
Don Cruickshank

0

只是对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。这将使控制台窗口消失,但其他所有内容保持不变。


0

“ 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.