Показать полную графическую версию : Нужна помощь в удалении ярлыка с раб.стола
morozov_s_v
20-12-2011, 15:49
Добрый день. Прошу вас помочь в написании обратного действия на удаление 1)одного и 2) ряда каких либо ярлыков с рабочего стола пользователя.
Вот пример создания ярлыка, что в нем надо добавить или поменять в первом и во втором случае.
Спасибо вам.
------------------------------------------------------------------------------------------------------------
Set WshShell = WScript.CreateObject("WScript.Shell")
strDesktop = WshShell.SpecialFolders("Desktop")
Set oMyShortCut= WshShell.CreateShortcut(strDesktop & "\GARANT.lnk")
oMyShortCut.TargetPath = "\\server\Garant-Client\garant.exe"
oMyShortCut.WorkingDirectory = "\\server\Garant-Client"
oMyShortCut.Description = "GARANT"
oMyShortCut.Save
------------------------------------------------------------------------------------------------------------
Удаление ярлыков ничем не отличается от удаления прочих файлов: Working with Files (http://msdn.microsoft.com/en-us/site/aa263346). Приведённый Вами код излишен для этого.
morozov_s_v
21-12-2011, 16:18
Удаление ярлыков ничем не отличается от удаления прочих файлов: Working with Files. Приведённый Вами код излишен для этого. »
Прошу помочь разобраться.
сможете написать пример ?
сможете написать пример ? »
для начала нужно понять, для каких пользователей создан ярлык.
C:\Documents and Settings\Пользователь\Рабочий стол\STDU Viewer.lnk
C:\Documents and Settings\All Users\Рабочий стол\STDU Viewer.lnk
для всех пользователей:
;Удалить ярлык с рабочего стола
Del /q "%ALLUSERSPROFILE%\Рабочий стол\STDU Viewer.lnk"
Сохранять в 866 кодировке.
Прошу помочь разобраться.
сможете написать пример ? »
Пример удаления есть в вышеприведённой ссылке Working with Files (http://msdn.microsoft.com/en-us/site/aa263346). Что именно Вам не понятно?
Dragokas
21-12-2011, 19:57
sov44, это не будет работать на Win7.
Попробуйте это:
@echo off
chcp 1251
setlocal
set files=Русс.lnk 1111*.lnk *z.lnk
%homedrive%
if exist "%homedrive%%homepath%\desktop" (set homedesk=desktop) else (set homedesk=Рабочий стол)
if exist "%public%" (set comdesk=%public%\%homedesk%) else (set comdesk=%allusersprofile%\%homedesk%)
chdir "%homedrive%%homepath%\%homedesk%"
for %%a in (%files%) do (del /q "%%a"&del /q "%comdesk%\%%a" >nul)
endlocal
chcp 866
1) Можно сохранить в блокноте, не обязательна кодировка 866.
2) Работает и на ХР, и на Win7.
3) Удаляет указанные файлы на рабочем столе пользователя и общем.
Файлы для удаления размещайте в секции "set files=" через пробел (все ярлыки имеют расширение .lnk)
Подскажите, как удалить ярлыки по умолчанию ( IE, Windows media, Проводник) в Windows 7 из панели быстрого запуска?
Ярлыки находились в папке User Pinned (%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\). Папка удалена, но ярлыки с панели не пропали. :(
Lucretius
13-09-2013, 18:18
А возможно ли удалить ярлык с произвольным именем, зная только путь к файлу ярлыка?
Lucretius, а если там десять ярлыков — и какой из них Ваш?!
Что-нибудь ещё об ярлыке известно? На что указывает, например?
Lucretius
14-09-2013, 18:24
Iska, я имел в виду, что известен только путь к файлу на который ссылается ярлык. Сам ярлык находиться на рабочем столе пользователя.
Iska, я имел в виду, что известен только путь к файлу на который ссылается ярлык. »
«Ну, так это совсем другое дело!»
Option Explicit
Dim strGoalTargetPath
Dim objFolder
Dim objFSO
Dim objFile
Dim objWshShell
Dim objWshShortcut
strGoalTargetPath = "C:\WINDOWS\system32\calc.exe"
Set objFolder = WScript.CreateObject("Shell.Application").NameSpace("shell:Desktop")
If Not objFolder Is Nothing Then
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In WScript.CreateObject("Scripting.FileSystemObject").GetFolder(objFolder.self.Path).Files
If LCase(objFSO.GetExtensionName(objFile.Name)) = "lnk" Then
Set objWshShortcut = objWshShell.CreateShortcut(objFile.Path)
If LCase(objWshShortcut.TargetPath) = LCase(strGoalTargetPath) Then
WScript.Echo objFile.Name, objWshShortcut.TargetPath
'objFile.Delete True
End If
End If
Next
Set objWshShell = Nothing
Set objFSO = Nothing
Else
WScript.Echo "Can't determine user desktop folder"
End If
WScript.Quit 0
Если корректно находит потребный ярлык — раскомментируйте выделенную строку для удаления ярлыка, ссылающегося на заданный объект.
Lucretius
15-09-2013, 16:47
Iska, спасибо! Если Вас не затруднит, добавьте пожалуйста в скрипт:
1. Вызов скрипта с аргументом (wscript.exe "ShortcutDel.vbs" "полный путь к файлу")
2. Перед удалением скопировать найденные ярлыки в директорию со скриптом.
1. Вызов скрипта с аргументом (wscript.exe "ShortcutDel.vbs" "полный путь к файлу") »
Снимаю шляпу: крайне редко кто понимает, как сие должно реализовываться. Настолько редко, что я уже перестал сие делать, поскольку в абсолютном большинстве случаев после выкладывания правильного подхода от вопрошающего тут же появляется вопрос: «А можно попроще, чтобы прямо в пакетном файле/скрипте вбивать путь?». И никакие объяснения, что именно так, как сделано, и есть — правильно, не помогают.
3. Удаление найденных ярлыков с рабочего стола с подавлением запроса на удаление. »
А сейчас разве как-то по-другому происходит?
Пробуйте:
Option Explicit
Dim strGoalTargetPath
Dim objFolder
Dim objFSO
Dim objFile
Dim objWshShell
Dim objWshShortcut
If WScript.Arguments.Count = 1 Then
strGoalTargetPath = WScript.Arguments.Item(0)
Set objFolder = WScript.CreateObject("Shell.Application").NameSpace("shell:Desktop")
If Not objFolder Is Nothing Then
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
For Each objFile In WScript.CreateObject("Scripting.FileSystemObject").GetFolder(objFolder.self.Path).Files
If LCase(objFSO.GetExtensionName(objFile.Name)) = "lnk" Then
Set objWshShortcut = objWshShell.CreateShortcut(objFile.Path)
If LCase(objWshShortcut.TargetPath) = LCase(strGoalTargetPath) Then
objFile.Copy objFSO.GetParentFolderName(WScript.ScriptFullName) & "\", True
objFile.Delete True
End If
End If
Next
Set objWshShell = Nothing
Set objFSO = Nothing
Else
WScript.Echo "Can't determine user desktop folder"
WScript.Quit 2
End If
Else
WScript.Echo "Usage: " & WScript.ScriptName & " <Path to shortcut target>"
WScript.Quit 1
End If
WScript.Quit 0
Lucretius
15-09-2013, 17:53
Спасибо большое! Всё работает. Под "запрос на удаление" я ошибочно принял вывод:
WScript.Echo objFile.Name, objWshShortcut.TargetPath
отредактировал в сообщении.
Lucretius, ясно.
Нет, это был просто вывод отладочного сообщения, для того, чтобы убедиться, что находится именно то, что нужно.
P.S. Если у Вас есть целый набор целей — можем сделать так, что Вы их перечисляете в текстовом файле и указываете этот файл в качестве аргумента скрипта.
Lucretius
15-09-2013, 23:02
Iska, ещё раз спасибо, у меня последний вопрос - как добавить в скрипт создание ярлыка? Т.е. такая последовательность работы скрипта: копирование >удаление >создание с параметрами по умолчанию. Тему читал: "Создание ярлыков при установке ОС" (http://www.oszone.net/6161), но мне не удаётся внести изменения в приведённый Вами скрипт.
Lucretius, приведите, для моего понимания, конкретный пример — что удаляете, что создаёте.
такая последовательность работы скрипта: копирование >удаление >создание с параметрами по умолчанию. »
1. Что есть «копирование»?
2. Что есть «параметры по умолчанию»?
Lucretius
16-09-2013, 07:47
Iska,
Последовательность выполнения скрипта:
Вызов скрипта с аргументом (wscript.exe "Shortcut.vbs" "полный путь к исполняемому файлу")
Поиск ярлыка на рабочем столе пользователя по аргументу вызова (имя ярлыка неизвестно)
Копирование найденного ярлыка в директорию со скриптом.
Удаление найденного ярлыка с рабочего стола пользователя
Создание ярлыка на рабочем столе пользователя с параметрами по умолчанию
Т.е. скрипт который Вы привели здесь (http://forum.oszone.net/post-2218318-13.html), завершающим этапом выполнения которого будет создание ярлыка , где:
Путь к исполняемому файлу на который ссылается ярлык = аргумент вызова
Имя ярлыка = имя исполняемого файла
Рабочая папка = папка расположения исполняемого файла
остальные параметры ярлыка такие, как если бы он был создан через контекстное меню проводника, т.е. стиль открытия окна, клавиши быстрого вызова, комментарий, права запуска и т.д. - оставить по умолчанию(без изменений).
Lucretius, в чём тогда смысл:
Удаление найденного ярлыка с рабочего стола пользователя »
+
Путь к исполняемому файлу на который ссылается ярлык = аргумент вызова »
? Чем не устраивает уже существующий аналогичный же ярлык? Что в нём не так? И зачем его нужно копировать в папку скрипта?
Lucretius
16-09-2013, 22:10
Iska, скрипт будет работать в составе патча к программе, сама программа имеет два исполняемых файла(или один - опционально в процессе инсталляции) и создаёт ярлыки только в меню пуск, что весьма не удобно. Предполагаю, что большинство пользователей вручную создаёт ярлык(и) на рабочем столе. Поэтому при согласии пользователя создать ярлык(и) на рабочем столе - запускается скрипт и создаёт ярлыки со стандартным именем/параметрами (без «ярлык для», «запуск от» – патч вносит изменения в манифест и т.д.) предварительно скопировав ярлык(и) созданные пользователем в папку скрипта(backup) на случай прерывания работы патча(по желанию пользователя или иным причинам) и «отката» всех сделанных изменений. Удалить ярлыки с рабочего стола необходимо по понятной причине — избежать создание дублей. Во всяком случае такой вариант меня устраивает и я буду очень признателен если, Вы поможете мне.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.