Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление ярлыка от не существующей программы

Ответить
Настройки темы
CMD/BAT - [решено] Удаление ярлыка от не существующей программы

Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


Нужна команда для удаления ярлыка от не существующей программы.
Ярлык находится в 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"

Отправлено: 17:20, 04-06-2020

 

Старожил


Сообщения: 352
Благодарности: 192

Профиль | Отправить PM | Цитировать


Банальная отладка через
Код: Выделить весь код
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"
И так далее...
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:42, 04-06-2020 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для BKPB

Старожил


Сообщения: 172
Благодарности: 6

Профиль | Отправить PM | Цитировать


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

Отправлено: 17:59, 04-06-2020 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:52, 04-06-2020 | #4


Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


Пример написан на коленке, но закомментирован, чтобы было понятно что к чему.
Код: Выделить весь код
@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

Отправлено: 16:51, 06-06-2020 | #5



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление ярлыка от не существующей программы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Интерфейс - [решено] Удаление ярлыка в меню Создать avvp Microsoft Windows 7 4 07-02-2012 15:01
Разное - Запрос на удаление ярлыка при отсутствии объекта Gordon_Freeman0 Microsoft Windows 2000/XP 2 29-08-2010 11:19
Разное - Не открываются файлы, программы при акиваций ярлыка. Intense1 Microsoft Windows Vista 4 12-12-2009 22:58
Раздача ярлыка программы в сети Diesel315 Microsoft Windows NT/2000/2003 9 18-03-2009 12:47
Удаление ярлыка из диалогового окна автозапуска larios Microsoft Windows 2000/XP 1 03-02-2007 09:38




 
Переход