CMD/BAT - Удалить неверные ярлыки

Аватара пользователя
sov44

CMD/BAT - Удалить неверные ярлыки

Сообщение sov44 »

Многие программы-чистильщики имеют возможность удалять с рабочего стола (и не только) неверные ярлыки. Хочется понять принцип их работы и возможность реализации батником (без использования сторонними утилитами).
Аватара пользователя
Iska

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение Iska »

Принцип работы простой — проверить существование файлового объекта по целевому пути ярлыка и, в случае его отсутствия, вывести запрос на удаление такого ярлыка.




Цитата sov44:



и возможность реализации батником.
CMD/BAT - Удалить неверные ярлыки




Никак. Сторонние утилиты, WSH, PoSH. Надо заметить, что работать нужно будет со всеми возможными целями. В том числе и с ShellLink, и с MSI.
Аватара пользователя
sov44

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение sov44 »

Цитата Iska:



Никак. Сторонние утилиты, WSH, PoSH.
CMD/BAT - Удалить неверные ярлыки





Цитата sov44:



возможность реализации батником
CMD/BAT - Удалить неверные ярлыки




Значит нужно сделать их вызов батником. Ищется реализация.
Аватара пользователя
Iska

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение Iska »

Как-то так (перечисление без удаления):



Код:

Код: Выделить всё

Option Explicit
Dim strSourceFolder
Dim objWshShell
Dim objFSO
Dim objShell
Dim objFile
Dim objRecord
Set objWshShell = WScript.CreateObject("WScript.Shell")
Set objFSO      = WScript.CreateObject("Scripting.FileSystemObject")
Set objShell    = WScript.CreateObject("Shell.Application")
strSourceFolder = objWshShell.SpecialFolders("Desktop")
With objFSO
	If .FolderExists(strSourceFolder) Then
		For Each objFile In .GetFolder(strSourceFolder).Files
			If StrComp(.GetExtensionName(objFile.Name), "lnk", vbTextCompare) = 0 Then
				On Error Resume Next
				Set objRecord = WScript.CreateObject("WindowsInstaller.Installer").ShortcutTarget(objFile.Path)
				If Err.Number  0 Then
					Err.Clear
					On Error Goto 0
					With objWshShell.CreateShortcut(objFile.Path)
						If Not objFSO.FileExists(.TargetPath) Then
							With objShell.NameSpace(objFSO.GetParentFolderName(objFile.Path)).ParseName(objFile.Name).GetLink
								If Not objFSO.FileExists(.Target.Path) Then
									WScript.Echo objFile.Name
								End If
							End With
						End If
					End With
				Else
					On Error Goto 0
					Set objRecord = Nothing
				End If
			End If
		Next
	Else
		WScript.Echo "Can't find Desktop folder [" & strSourceFolder & "]."
	End If
End With
Set objShell    = Nothing
Set objFSO      = Nothing
Set objWshShell = Nothing
WScript.Quit 0
Аватара пользователя
Georgio

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение Georgio »

Код: Выделить всё

@echo off
chcp 1251>nul
for %%i in (*.lnk) do (
 for /f "tokens=*" %%j in ('
  find ":\"^<"%%i"^| find /v "/"
 ') do (
  chcp 866>nul
  if not exist "%%j" (
   set /p"=%%~nxj not exist. "<nul
   del "%%i"&& (
   echo %%~nxi was deleted.
   )|| (
   echo Failed to delete %%~nxi.
   )
   )
  )
 )
pause>nul
exit /b
Аватара пользователя
sov44

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение sov44 »

Цитата Iska:



А если там будет ссылка на сетевой ресурс, ShellLink или это ярлык MSI, которые вообще могут указывать на установленное приложение, но не существующее ещё на диске (это предусмотрено самой технологией)?
CMD/BAT - Удалить неверные ярлыки




Georgio, Iska Изображение command line only
Аватара пользователя
sov44

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение sov44 »

Цитата Iska:



А если там будет ссылка на сетевой ресурс
CMD/BAT - Удалить неверные ярлыки




Iska, мой вариант. как будет выглядеть батник?
Аватара пользователя
Georgio

Re: CMD/BAT - Удалить неверные ярлыки

Сообщение Georgio »

sov44, выложите пример такого ярлыка (в архиве).
Ответить

Вернуться в «Скриптовые языки администрирования Windows»