是否有可能使用PHP创buildWindows快捷方式?

我正在编写一个脚本来整理一堆散布在我的硬盘上的媒体,到目前为止,在我的Mac(Mac)上运行得非常好,因为我在目录中使用了符号链接来给人一种印象,位置,而实际的数据分布在4个驱动器上。

不幸的是,我必须在工作中使用Windows,当然在PHP 5.3之前没有符号链接的支持(而且我认为当命令行工具“mklink”第一次出现时需要Vista)。

作为一种解决方法,我考虑创build一个快捷方式,但我找不到一个方法。 有没有可能,还是有没有更好的解决scheme,我没有考虑?

感谢上面的答案,我发现你确实可以从PHP调用COM,这是我的第一个符号链接()替换:

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(); } } 

在Vista之前,支持连接点(类似于UNIX符号链接)。

您需要Windows资源工具包中的linkd工具(免费下载)。

快捷方式只是文件。 您可以使用COM WScript API创建快捷方式文件。 示例代码使用Python执行此操作。 如果有一个PHP的库,可以让你做COM互操作,你应该可以做类似的事情。

 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() 

为了记录,NTFS上的连接点实际上只用于目录。 我使用linkd.exe创建了一个虚拟文件系统,取得了很大的成功,但还有一些事情需要注意:

  • 你不能在卷之间进行链接(即试图在C中创建一个链接:指向D中的一个位置:将不起作用)
  • 取消链接似乎零星地删除目的地的数据。 在删除链接之前备份/移动数据!
  • 通过网络共享数据时,连接点会遇到同样的问题,有时它们不能远程工作。 他们似乎也随机(即有时)从源文件夹继承一些共享权限,无论如何配置目标链接。

欢呼关于创建.lnk文件的有用的职位,正是我之后…