我正在编写一个脚本来整理遍布我的硬盘的一堆媒体,到目前为止在家里(在我的Mac上)它运行得非常好,因为我在目录中使用符号链接给人的印象是一切都是组织在一个位置,而实际数据分布在4个驱动器上。
不幸的是,我必须在工作中使用Windows,当然在PHP 5.3之前没有符号链接支持(我假设需要Vista,就像命令行工具“mklink”首次出现时那样)。
作为一种解决方法,我考虑创建一个快捷方式,但我找不到这样做的方法。是否可能,或者是否有一个我没有考虑的更好的解决方案?
答案 0 :(得分:7)
感谢上面的回答,我发现你确实可以从php调用COM,这是我的第一个symlink()替换草案:
if (! function_exists('symlink')) {
function symlink($target, $link) {
if (! substr($link, -4, '.lnk'))
$link .= '.lnk';
$shell = new COM('WScript.Shell');
$shortcut = $shell->createshortcut($link);
$shortcut->targetpath = $target;
$shortcut->save();
}
}
答案 1 :(得分:2)
在Vista之前支持连接点(类似于UNIX符号链接)。
您需要Windows资源工具包中的linkd
工具(免费下载)。
快捷方式只是文件。您可以使用COM WScript API创建快捷方式文件。示例代码使用Python执行此操作。如果存在一个允许你进行COM互操作的PHP库,你应该可以做类似的事情。
import win32com.client
import winshell
userDesktop = winshell.desktop()
shell = win32com.client.Dispatch('WScript.Shell')
shortcut = shell.CreateShortCut(userDesktop + '\\Zimbra Webmail.lnk')
shortcut.Targetpath = r'C:\Program Files\Mozilla Firefox\firefox.exe'
shortcut.Arguments = 'http://mysite.com/auth/preauth.php'
shortcut.WorkingDirectory = r'C:\Program Files\Mozilla Firefox'
shortcut.save()
答案 2 :(得分:0)
对于记录,NTFS上的连接点确实仅用于目录。我使用linkd.exe创建虚拟文件系统取得了巨大成功,但有几点需要注意:
为有关创建.lnk文件的有用帖子干杯,就像我之后...