使相对目标相对快捷

Make relative shortcut to relative target

我有一个问题,在网上搜索 1 小时后仍未找到解决方案!

情况: 我有一个目录 \DIR 在这个目录中,我有一个 SCRIPT.lnk,我想将其定位为 \DIR\Dependences\SCRIPT.bat\DIR 文件夹将是可移植的(在 USB 密钥或任何其他随机目录中)。

你有办法让他们成为亲戚吗? 我尝试了多种语法类型,但是 none 有效。

一旦意识到批处理文件不可执行,解决方案就很简单了。执行的是 cmd.exe,然后解释您的批处理脚本。考虑到这一点,您可以将快捷方式指向 cmd.exe 的绝对完全限定路径或作为其传统环境变量 %comspec%(或 %windir%\system32\cmd.exe,如果您愿意)。

现在,由于您的 bat 文件不再是 目标,而是现在的 argument,您可以整天与那个相关长。美妙之处在于,如果将快捷方式与包含批处理脚本的文件夹一起移动到不同的驱动器和不同的深度,它仍然有效。

<# : batch portion
@echo off & setlocal

set "shortcutname=script.lnk"
set "shortcuttarget=DIR\Dependences\SCRIPT.bat"

powershell -noprofile "iex (${%~f0} | out-string)"
goto :EOF

: end batch / begin PowerShell hybrid code #>

$shortcut = (new-object -COM WScript.Shell).CreateShortcut($env:shortcutname)
$shortcut.TargetPath = "%comspec%"
$shortcut.Arguments = '/c "{0}"' -f $env:shortcuttarget
$shortcut.Save()

对于任何想知道如何将其应用于指向 .bat 脚本以外的内容(例如 PDF 文档)的快捷方式的人,只需将 $shortcut.Arguments 行替换为:

$shortcut.Arguments = '/c start "" "{0}"' -f $env:shortcuttarget