我有一个使用这种文件结构的游戏:
GAME FOLDER
->data
->data->run.bat
我想run.bat
在 GAME FOLDER 中放一个快捷方式,但如果我移动它,或者其他人安装它,它就不起作用,因为目标是错误的。有没有办法让目标和“开始”相对于游戏文件夹?
右键单击您的 /bat/ 文件夹,然后单击Create Shortcut。
bat - Shortcut
当前目录。Shortcut to bat
.右键单击您刚刚创建的快捷方式,然后单击Properties。
将目标(在Windows 7 上的快捷方式选项卡下)更改为以下内容:
%windir%\system32\cmd.exe /c start "" "%CD%\bat\bat\run.bat"
确保Start in为空白。这会导致它在当前目录中启动。
在快捷方式到 .bat 的情况下这可能是可以接受的,但如果您想更改图标,请再次打开快捷方式的属性并单击更改图标...(同样,在Windows 7的快捷方式选项卡下)。此时您可以Browse...查找图标或通过输入来调出默认系统图标列表
%SystemRoot%\system32\SHELL32.dll
到Browse...
按钮的左侧并点击Enter。这适用于 Windows 7 和 Windows XP,但由于样式更新,图标会有所不同(但可以识别出相似)。根据快捷方式所在的 Windows 版本,图标有时会相应 更改。
更多信息:
请参阅将“start”命令与传递给启动程序的参数一起使用,以更好地理解第一个Target命令开头的空双引号。
根据微软的说法,如果您将该'Start In'
框留空,脚本将在当前工作目录中运行。我已经在 Windows 7 中尝试过,它似乎工作得很好。
来源: http: //support.microsoft.com/kb/283065
尝试使用Relative(Windows 命令行应用程序)。
基本上,快捷方式可以有一个相对链接,但 Windows 没有提供实际创建的方法。
如果您可以设置系统变量(例如 %MyGameFolder%),那么您可以在路径和快捷方式中使用它,Windows 会为您填充路径的其余部分(即 %MyGameFolder%\data\MyGame.exe
)。
这是一个小底漆。您可以通过批处理文件设置此值,或者如果您分享您计划如何创建快捷方式,您可以通过编程方式设置它。
您可以通过更改文件路径手动创建相对快捷方式。首先在通常的上下文菜单中,为文件创建一个新的 Windows 快捷方式,然后在文件的属性 -> 位置:
%windir%\explorer.exe "..\data\run.bat"
我喜欢leoj3n 的解决方案。它也可以用来设置一个相对的“start in”目录,这是我使用start的 /D 参数所需要的。如果没有 /c 或 /k in 作为cmd的参数,后续的启动命令将不会运行。/c 将在运行命令后立即关闭 shell,而 /k 将保持打开状态(即使在命令完成后)。因此,如果您正在运行的任何内容都符合标准输出并且您需要查看它,请使用 /k。
不幸的是,根据 lnk 文件规范,图标并没有保存在快捷方式中,而是“使用环境变量编码,这使得可以在位置不同但使用环境变量表示的机器之间找到图标”。因此,如果路径正在更改并且您尝试从您指向的可执行文件中获取图标,则它可能无法正确传输。
我在 Start in 字段中尝试了 %~dp0 ,它在 Windows 10 x64 中运行良好
我不确定我是否正确,或者我遗漏了什么,但就目前而言(2016-07-11,运行 Win7 Enterprise SP1),LNK 文件在移动甚至更改驱动器号后会自行调整跑到新地方!我在我的 USB 驱动器上创建了一个新的快捷方式,并尝试以相对位置保持不变的方式移动快捷方式及其目标,然后我更改了驱动器号。该快捷方式在这两种情况下都有效,并且在我双击后调整了目标字段。
看起来微软已经在过去的更新中解决了这个问题。
请有人确认这一点。
在阅读了几个答案后,我决定用一个简单的解决方案来做到这一点:我没有使用快捷方式,而是制作了一个 .bat,只有一行来调用主 .bat ,它就像我想要的那样工作。
您可以让批处理文件更改当前工作目录 (CD)。
按照您的方式制作快捷方式后,在属性中设置以下内容:
目标:
%comspec% /k "data\run.bat"
/k
如果您不希望提示在运行后保持打开状态,请删除。开始于:
%cd%\data
可以使用windows 命令行上的mklink命令创建具有相对路径的链接。
mklink /d \MyDocs \Users\User1\Documents
这可能是创建链接的最佳方式,因为显然,快捷方式的行为可能会根据它们的创建方式而有所不同(UI 与 mklink 命令)。当我更改根文件夹时,我观察到快捷方式的一些奇怪行为。
最简单的解决方案:> 环境变量 方便的小动物。
如果另一个人要在他们各自的系统驱动器上安装/解压缩任何东西(通常是 c:)。
出于演示目的,调用我们的应用程序“test.exe”(可以是任何可执行文件/文件,不必是 exe),它将被安装/解压缩到文件夹 MYCOMPANY\MYAPP\
然后只需创建一个使用 %SystemDrive%\MYCOMPANY\MYAPP\test.exe 作为目标和 %SystemDrive%\MYCOMPANY\MYAPP\ 作为开始的快捷方式。
所以现在你想部署它。使用“WinRAR”之类的应用程序。
简单的方法是使用自解压 zip 文件,整齐地打包为“.exe”,我将一个用于我的快捷方式,另一个用于应用程序。有办法制作一个自解压 zip 文件,将不同的文件解压到不同的目录,但我还没有玩过。
另一种方法是为快捷方式制作一个自解压,将其嵌入到应用程序的自解压中,然后应用一次运行脚本,因为您知道文件将在哪里。等等
如果您想让安装程序使用自定义安装/解压缩目录,那么请查看NSIS一个可编写脚本的安装系统。
玩起来很有趣,希望我的信息有所帮助。
建立相对路径的符号链接。在命令提示符下cmd
(具有管理员权限):
mklink /D SYMLINK_NAME RELATIVE_TARGET_PATH
'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
只是对 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
. 这将使控制台窗口消失,但其他一切都保持不变。