CMD/BAT - Удалить неверные ярлыки
-
sov44
CMD/BAT - Удалить неверные ярлыки
Многие программы-чистильщики имеют возможность удалять с рабочего стола (и не только) неверные ярлыки. Хочется понять принцип их работы и возможность реализации батником (без использования сторонними утилитами).
-
Iska
Re: CMD/BAT - Удалить неверные ярлыки
Принцип работы простой — проверить существование файлового объекта по целевому пути ярлыка и, в случае его отсутствия, вывести запрос на удаление такого ярлыка.
Цитата sov44:
и возможность реализации батником.
Никак. Сторонние утилиты, WSH, PoSH. Надо заметить, что работать нужно будет со всеми возможными целями. В том числе и с ShellLink, и с MSI.
Цитата sov44:
и возможность реализации батником.
CMD/BAT - Удалить неверные ярлыки
Никак. Сторонние утилиты, WSH, PoSH. Надо заметить, что работать нужно будет со всеми возможными целями. В том числе и с ShellLink, и с MSI.
-
sov44
Re: CMD/BAT - Удалить неверные ярлыки
Цитата Iska:
Никак. Сторонние утилиты, WSH, PoSH.
Цитата sov44:
возможность реализации батником
Значит нужно сделать их вызов батником. Ищется реализация.
Никак. Сторонние утилиты, WSH, PoSH.
CMD/BAT - Удалить неверные ярлыки
Цитата sov44:
возможность реализации батником
CMD/BAT - Удалить неверные ярлыки
Значит нужно сделать их вызов батником. Ищется реализация.
-
Iska
Re: CMD/BAT - Удалить неверные ярлыки
Как-то так (перечисление без удаления):
Код:
Код:
Код: Выделить всё
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 - Удалить неверные ярлыки
Код: Выделить всё
@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 - Удалить неверные ярлыки
Цитата Iska:
А если там будет ссылка на сетевой ресурс, ShellLink или это ярлык MSI, которые вообще могут указывать на установленное приложение, но не существующее ещё на диске (это предусмотрено самой технологией)?
Georgio, Iska
command line only
А если там будет ссылка на сетевой ресурс, ShellLink или это ярлык MSI, которые вообще могут указывать на установленное приложение, но не существующее ещё на диске (это предусмотрено самой технологией)?
CMD/BAT - Удалить неверные ярлыки
Georgio, Iska
command line only-
sov44
Re: CMD/BAT - Удалить неверные ярлыки
Цитата Iska:
А если там будет ссылка на сетевой ресурс
Iska, мой вариант. как будет выглядеть батник?
А если там будет ссылка на сетевой ресурс
CMD/BAT - Удалить неверные ярлыки
Iska, мой вариант. как будет выглядеть батник?
-
Georgio