3

В Vista/7, если я пытаюсь удалить ярлык с помощью следующей команды -:

del "%allusersprofile%\Desktop\MyShortcut.lnk"

...Windows видит эту папку как пустую и не удаляет файл.

Переменная среды "allusersprofile" указывает на «C:\ProgramData», однако "Рабочий стол" на самом деле является мягкой символической ссылкой на папку C:\Users\Public\Desktop.

Проблема заключается в том, что эти программные ссылки являются просто ярлыками Windows Explorer и не распознаются командами cmd или пакетными файлами.

Единственное решение, которое я вижу, - это сделать следующее:

XP:

del "%allusersprofile%\Desktop\MyShortcut.lnk"

Vista/7:

del "%PUBLIC%\Desktop\MyShortcut.lnk"

Есть ли общее решение для обеих ОС?

4 ответа4

5

Как заявил Гарретт в комментариях к этому вопросу, единственное решение, которое я вижу, заключается в следующем:

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

Можно отметить , что в соответствии с этим StackOverflow вопрос, а сообщение в блоге Рэймонд Чен, dir должен дать правильные результаты как XP и 7, однако в моем опыте это не так.

2

Вы не указали тип сценария (VBS или BAT), но вот сценарий VB, который не зависит от системы. Не мой сценарий, я вытащил его с этого сайта Microsoft. Согласно этой странице проверено, что она работает на 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. Я запускал сценарий в объекте групповой политики как сценарий запуска компьютера.

0

Это работает в win7.

Я не смог попробовать это в XP, но я думаю, что это должно работать.

    del "%HOMEDRIVE%%HOMEPATH%\Desktop\test.lnk"

Сохраните его как командный файл и запустите его как обычно. Если ваша учетная запись не имеет прав администратора, вам может потребоваться щелкнуть правой кнопкой мыши и выбрать «Запуск от имени администратора». Вы также можете открыть cmd и просто ввести его в качестве команды.

0

Хороший совет, который помог с моим сценарием.

  1. Я создал командный файл для удаления ярлыков

fixme.bat содержит следующие 3 строки:

del "C:\Users\Public\Desktop\gVim 7.4.lnk"
del "C:\Users\Public\Desktop\Cygwin64 Terminal.lnk"
pause
  1. Щелкните правой кнопкой мыши командный файл, чтобы открыть меню.

  2. Выберите "Запускать повышенные привилегии", введите свой пароль.

Успех.

Вы также можете попробовать "Запуск от имени администратора".

Удачи!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .