Войти

Показать полную графическую версию : Нужна помощь в удалении ярлыка с раб.стола


Страниц : [1] 2

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

Iska
20-12-2011, 16:59
Удаление ярлыков ничем не отличается от удаления прочих файлов: Working with Files (http://msdn.microsoft.com/en-us/site/aa263346). Приведённый Вами код излишен для этого.

morozov_s_v
21-12-2011, 16:18
Удаление ярлыков ничем не отличается от удаления прочих файлов: Working with Files. Приведённый Вами код излишен для этого. »

Прошу помочь разобраться.
сможете написать пример ?

sov44
21-12-2011, 16:43
сможете написать пример ? »
для начала нужно понять, для каких пользователей создан ярлык.
C:\Documents and Settings\Пользователь\Рабочий стол\STDU Viewer.lnk
C:\Documents and Settings\All Users\Рабочий стол\STDU Viewer.lnk

для всех пользователей:
;Удалить ярлык с рабочего стола
Del /q "%ALLUSERSPROFILE%\Рабочий стол\STDU Viewer.lnk"
Сохранять в 866 кодировке.

Iska
21-12-2011, 19:44
Прошу помочь разобраться.
сможете написать пример ? »
Пример удаления есть в вышеприведённой ссылке 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)

sov44
05-01-2012, 20:43
Подскажите, как удалить ярлыки по умолчанию ( IE, Windows media, Проводник) в Windows 7 из панели быстрого запуска?
Ярлыки находились в папке User Pinned (%AppData%\Microsoft\Internet Explorer\Quick Launch\User Pinned\). Папка удалена, но ярлыки с панели не пропали. :(

Lucretius
13-09-2013, 18:18
А возможно ли удалить ярлык с произвольным именем, зная только путь к файлу ярлыка?

Iska
13-09-2013, 20:57
Lucretius, а если там десять ярлыков — и какой из них Ваш?!

Что-нибудь ещё об ярлыке известно? На что указывает, например?

Lucretius
14-09-2013, 18:24
Iska, я имел в виду, что известен только путь к файлу на который ссылается ярлык. Сам ярлык находиться на рабочем столе пользователя.

Iska
14-09-2013, 20:08
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. Перед удалением скопировать найденные ярлыки в директорию со скриптом.

Iska
15-09-2013, 17:34
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
отредактировал в сообщении.

Iska
15-09-2013, 18:31
Lucretius, ясно.

Нет, это был просто вывод отладочного сообщения, для того, чтобы убедиться, что находится именно то, что нужно.

P.S. Если у Вас есть целый набор целей — можем сделать так, что Вы их перечисляете в текстовом файле и указываете этот файл в качестве аргумента скрипта.

Lucretius
15-09-2013, 23:02
Iska, ещё раз спасибо, у меня последний вопрос - как добавить в скрипт создание ярлыка? Т.е. такая последовательность работы скрипта: копирование >удаление >создание с параметрами по умолчанию. Тему читал: "Создание ярлыков при установке ОС" (http://www.oszone.net/6161), но мне не удаётся внести изменения в приведённый Вами скрипт.

Iska
16-09-2013, 00:46
Lucretius, приведите, для моего понимания, конкретный пример — что удаляете, что создаёте.

такая последовательность работы скрипта: копирование >удаление >создание с параметрами по умолчанию. »
1. Что есть «копирование»?
2. Что есть «параметры по умолчанию»?

Lucretius
16-09-2013, 07:47
Iska,
Последовательность выполнения скрипта:

Вызов скрипта с аргументом (wscript.exe "Shortcut.vbs" "полный путь к исполняемому файлу")
Поиск ярлыка на рабочем столе пользователя по аргументу вызова (имя ярлыка неизвестно)
Копирование найденного ярлыка в директорию со скриптом.
Удаление найденного ярлыка с рабочего стола пользователя
Создание ярлыка на рабочем столе пользователя с параметрами по умолчанию

Т.е. скрипт который Вы привели здесь (http://forum.oszone.net/post-2218318-13.html), завершающим этапом выполнения которого будет создание ярлыка , где:

Путь к исполняемому файлу на который ссылается ярлык = аргумент вызова
Имя ярлыка = имя исполняемого файла
Рабочая папка = папка расположения исполняемого файла

остальные параметры ярлыка такие, как если бы он был создан через контекстное меню проводника, т.е. стиль открытия окна, клавиши быстрого вызова, комментарий, права запуска и т.д. - оставить по умолчанию(без изменений).

Iska
16-09-2013, 21:14
Lucretius, в чём тогда смысл:
Удаление найденного ярлыка с рабочего стола пользователя »
+
Путь к исполняемому файлу на который ссылается ярлык = аргумент вызова »
? Чем не устраивает уже существующий аналогичный же ярлык? Что в нём не так? И зачем его нужно копировать в папку скрипта?

Lucretius
16-09-2013, 22:10
Iska, скрипт будет работать в составе патча к программе, сама программа имеет два исполняемых файла(или один - опционально в процессе инсталляции) и создаёт ярлыки только в меню пуск, что весьма не удобно. Предполагаю, что большинство пользователей вручную создаёт ярлык(и) на рабочем столе. Поэтому при согласии пользователя создать ярлык(и) на рабочем столе - запускается скрипт и создаёт ярлыки со стандартным именем/параметрами (без «ярлык для», «запуск от» – патч вносит изменения в манифест и т.д.) предварительно скопировав ярлык(и) созданные пользователем в папку скрипта(backup) на случай прерывания работы патча(по желанию пользователя или иным причинам) и «отката» всех сделанных изменений. Удалить ярлыки с рабочего стола необходимо по понятной причине — избежать создание дублей. Во всяком случае такой вариант меня устраивает и я буду очень признателен если, Вы поможете мне.




© OSzone.net 2001-2012