在 Vista/7 中,如果我尝试使用以下命令删除快捷方式 -:
del "%allusersprofile%\Desktop\MyShortcut.lnk"
...Windows 认为该文件夹是空的,因此不会删除该文件。
环境变量“allusersprofile”指向“C:\ProgramData”,但“Desktop”实际上是指向 C:\Users\Public\Desktop 文件夹的软符号链接。
问题似乎是这些软链接只是 Windows 资源管理器的快捷方式,并且无法被 cmd 提示符或批处理文件识别。
我能看到的唯一解决方案是执行以下操作:
经验值:
del "%allusersprofile%\Desktop\MyShortcut.lnk"
Vista/7:
del "%PUBLIC%\Desktop\MyShortcut.lnk"
这两个操作系统有没有什么通用的解决方案?
答案1
正如加勒特(Garrett)在该问题的评论中所述,我看到的唯一解决方案如下:
SET Version=XP
VER | FINDSTR /IL "6.1." > NUL
IF %ERRORLEVEL% EQU 0 SET Version=7
IF %Version% EQU 7 (
del "%PUBLIC%\Desktop\MyShortcut.lnk"
)
IF %Version% EQU XP (
del "%allusersprofile%\Desktop\MyShortcut.lnk"
)
有人可能会注意到,根据这个堆栈溢出问题,以及博客文章由 Raymond Chen 撰写的dir
应该%allusersprofile%\Desktop\<directory>
在 XP 和 7 上都能给出正确的结果,但是根据我的经验,事实并非如此。
答案2
您没有指定脚本类型(VBS 还是 BAT),但这里有一个与系统无关的 VB 脚本。不是我的脚本,是我提取的来自这个微软网站。根据该页面,它已被验证可以在 Windows 2000、XP、Vista 和 7 上运行。
''''''''''''''''''''''''''''''''''
'
' This VB script removes the requested desktop shortcuts
'
' Change only the file name (test.lnk)
'
' Script created by Holger Habermehl. October 23, 2012
''''''''''''''''''''''''''''''''''
Set Shell = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
DesktopPath = Shell.SpecialFolders("Desktop")
FSO.DeleteFile DesktopPath & "\test.lnk"
编辑
上述代码将查看特定用户的桌面(即用户名“john”登录时,代码将查看“C:\Users\john\Desktop\”或“C:\Documents and Settings\john\Desktop”)。如果要检查公共桌面,请将以下行更改为
DesktopPath = Shell.SpecialFolders("Desktop")
到
DesktopPath = Shell.SpecialFolders("AllUsersDesktop")
但请注意,根据用户的权限以及运行脚本的时间,他们可能会收到一个 UAC 框,要求以管理员身份登录 Windows Vista/7。我会在 GPO 中将该脚本作为计算机启动脚本运行。
答案3
这在 win7 中有效。
我还没有在 XP 中尝试过但我认为它应该可以工作。
del "%HOMEDRIVE%%HOMEPATH%\Desktop\test.lnk"
将其保存为批处理文件并正常运行。如果您的帐户没有管理员权限,您可能需要右键单击并选择“以管理员身份运行”。您也可以打开 cmd 并将其作为命令输入。
答案4
这里的建议很好,对我的情况很有帮助。
- 我创建了一个批处理文件来删除快捷方式
fixme.bat 包含以下 3 行:
删除“C:\Users\Public\Desktop\gVim 7.4.lnk” del "C:\Users\Public\Desktop\Cygwin64 Terminal.lnk" 暂停
右键单击批处理文件以弹出菜单。
选择“以提升的权限运行”,输入您的密码。
成功。
您也可以尝试“以管理员身份运行”。
祝你好运!