使Windows快捷方式相对于文件夹的位置开始?

时间:2009-07-23 04:06:06

标签: windows shortcuts

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

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

我想在GAME FOLDER中设置run.bat的快捷方式,但如果我移动它,或者其他人安装它,它将无效,因为目标是错误的。有没有办法让目标和“开始”相对于GAME FOLDER?

16 个答案:

答案 0 :(得分:63)

第1步:

右键单击/ bat /文件夹,然后单击创建快捷方式

在Windows 7上,您将在当前目录中获得bat - Shortcut

在Windows XP上,您将获得Shortcut to bat

第2步:

右键单击刚刚创建的快捷方式,然后单击属性

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

%windir%\system32\cmd.exe /c start "" "%CD%\bat\bat\run.bat"

单击“确定”。在Windows 7上,快捷方式图标将更改为cmd.exe图标。在短信连接到.bat的情况下,这可能是可以接受的,但是如果要更改图标,请再次打开快捷方式的属性,然后单击更改图标... (再次,在快捷方式下< Windows 7上的/ em>选项卡)。此时,您可以浏览... 获取图标,或通过输入

显示默认系统图标列表
%SystemRoot%\system32\SHELL32.dll

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

更多信息:

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

答案 1 :(得分:32)

根据Microsoft的说法,如果您将'Start In'框保留为空,则脚本将在当前工作目录中运行。我在Windows 7中尝试过这种方法,看起来效果很好。

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

答案 2 :(得分:7)

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

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

答案 3 :(得分:4)

如果您可以设置系统变量(类似于%MyGameFolder%),那么您可以在路径和快捷方式中使用它,Windows将为您填写其余路径(即%MyGameFolder%\data\MyGame.exe

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

答案 4 :(得分:3)

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

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

答案 5 :(得分:3)

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

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

答案 6 :(得分:1)

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

答案 7 :(得分:1)

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

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

请有人确认一下。

答案 8 :(得分:1)

在创建快捷方式后,在“属性”中设置以下内容:

  

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

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

开始于:%cd%\data

答案 9 :(得分:1)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

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

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

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

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

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

另一种方法是为shorcut制作一个selfextract,将其嵌入到应用程序的selfextract中,然后应用一次运行脚本,因为你知道文件的位置。  等

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

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

mklink /d \MyDocs \Users\User1\Documents

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

  • 我测试过Windows 7上有一种奇怪的行为。有时,当目标的根文件夹发生更改时,链接仍然可用(快捷方式属性会自动更新以反映更改的路径!)。 “start in”字段会自动更新,如果它在那里。
  • 我还注意到,第一次更改根路径时,一个链接不起作用(属性显示为旧)但是在第二次之后以及之后每次都有效。链接属性会因第一次运行而更新!
  • 我还注意到至少有两个链接,它不会更新路径,也不再有效。
  • 从链接属性中,任何字段的格式都没有区别,但行为不同。

答案 14 :(得分: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

答案 15 :(得分:-2)

到目前为止,

似乎没有解决方案。

在用于审计的ACL软件中,我们可以使用“..”来表示开始目录。我希望Windows可以允许类似的东西。

例如:原始路径:c \ windows \ games \ u2 \ strife.exe 如果快捷方式粘贴在“游戏”文件夹中,并且朋友喜欢复制...

路径应该(可以)编辑为“.. \ u2 \ strife.exe”