Войти

Показать полную графическую версию : [решено] Удаление ярлыка от не существующей программы


BKPB
04-06-2020, 17:20
Нужна команда для удаления ярлыка от не существующей программы.
Ярлык находится в C:\Users\Администратор ПК\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
имя ярлыка OneDrive
Так не удаляется:
del/q/f "%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
del/q/f "%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive"
del /f /s /q "%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
if exist "%AppData%\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" del /Q /F "%ALLUSERSPROFILE%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
del/q/f "%LocalAppData%\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
del/q/f "%LocalAppData%\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"

iglezz
04-06-2020, 17:42
Банальная отладка через echo "%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk" показала бы, что с путями тут всё очень не так, как надо.

Для пути C:\Users\Администратор ПК\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
%AppData% = C:\Users\Администратор ПК\AppData\Roaming

Соответственно, :: вместо
del/q/f "%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
:: должно быть
del/q/f "%AppData%\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"
И так далее...

BKPB
04-06-2020, 17:59
iglezz,
Спасибо, за помощь.
Решение:
del/q/f "%AppData%\Microsoft\Windows\Start Menu\Programs\OneDrive.lnk"

Iska
04-06-2020, 23:52
А ещё лучше WSH/PoSH, где есть доступ к псевдонимам, таким, как, например, «shell:Programs» :).

greg zakharov
06-06-2020, 16:51
Пример написан на коленке, но закомментирован, чтобы было понятно что к чему.
@echo off
setlocal enabledelayedexpansion
call:getShellFolder Programs
call:getPathFromLink Programs OneDrive
if not exist "!OneDrive!" (
echo del /f/q "!Programs!\OneDrive.lnk"
)
endlocal
exit /b

:: получение пути шелл-папки по схеме shell::{guid} не всегда срабатывает в
:: командных сценариях, поэтому излекаем путь нужной папки из реестра
:getShellFolder
set "key=HKCU\Software\Microsoft\Windows\CurrentVersion"
set key="!key!\Explorer\Shell Folders"
for /f "tokens=2,*" %%i in ('2^>nul reg query !key! /v %~1') do set "%~1=%%j"
exit /b

:: далее нужно проверить валидность ярлыка, для этого язвлекаем путь из
:: последнего с помощью простых паттернов find и findstr
:getPathFromLink
for /f "delims=" %%i in (
'find "\" ^< "!%~1!\%~2.lnk" ^| findstr /ric:"\..*$"'
) do set "%~2=%%i"
rem если путь содержит переменную окружения, раскрываем ее в полный путь
for /f "delims=" %%i in ('echo !%~2! ^| findstr /rc:"."') do set "%~2=%%i"
rem удаляет метку версии, если таковая затесалась в путь
if /i "!%~2:~1,1!" neq ":" set "%~2=!%~2:~1!"
exit /b




© OSzone.net 2001-2012