Показать полную графическую версию : Удалить неверные ярлыки
Многие программы-чистильщики имеют возможность удалять с рабочего стола (и не только) неверные ярлыки. Хочется понять принцип их работы и возможность реализации батником (без использования сторонними утилитами).
Принцип работы простой — проверить существование файлового объекта по целевому пути ярлыка и, в случае его отсутствия, вывести запрос на удаление такого ярлыка.
и возможность реализации батником. »
Никак. Сторонние утилиты, WSH, PoSH. Надо заметить, что работать нужно будет со всеми возможными целями. В том числе и с ShellLink, и с MSI.
Никак. Сторонние утилиты, WSH, PoSH. »
возможность реализации батником »
Значит нужно сделать их вызов батником. Ищется реализация.
Как-то так (перечисление без удаления):
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
@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
find ":\"^<"%%i"^| find /v "/" »
А если там будет ссылка на сетевой ресурс, ShellLink или это ярлык MSI, которые вообще могут указывать на установленное приложение, но не существующее ещё на диске (это предусмотрено самой технологией)?
А если там будет ссылка на сетевой ресурс, ShellLink или это ярлык MSI, которые вообще могут указывать на установленное приложение, но не существующее ещё на диске (это предусмотрено самой технологией)? »
Georgio, Iska :help: command line only
sov44, speak in russian, please.
А если там будет ссылка на сетевой ресурс »
Iska, мой вариант. как будет выглядеть батник?
sov44, выложите пример такого ярлыка (в архиве).
Хочется видеть путь типа g:\ConsultantPlus\cons.exe
Iska, мой вариант. как будет выглядеть батник? »
sov44, ничего не понял.
sov44, как-то так:
@echo off
setlocal enabledelayedexpansion
for %%i in (*.lnk) do (
for /f "tokens=1 delims=[]" %%j in ('
find /n "\\"^<"%%i"
') do (
for /f "tokens=1,2 delims=|" %%k in ('set /a %%j+1^& set /p^=^^^|^<nul^& set /a %%j+2') do (
for /f "tokens=1* delims=[]" %%m in ('find /n /v ""^<"%%i"') do (
if "%%m"=="%%k" set x=%%n
if "%%m"=="%%l" set y=%%n
)
)
if not exist "!x!\!y!" (
echo "!x!\!y!" not exist.
del "%%i"&& (
echo.
echo "%%~nxi" was deleted.
)|| (
echo Failed to delete %%~nxi.
)
echo.
echo.
)
)
)
endlocal
pause>nul
exit /b
.
Неверные ярлыки для несетевых объектов этот пакетный файл удалять не будет.
sov44, ничего не понял. »
:)
Нужно парсить ярлыки рабочего стола, выводить в консоль пути к программам, в том числе и к программам, размещённым на сервере.
Georgio, спасибо! Работает на тестовом Файле, завтра поэкспериментирую с другими линками.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.