Войти

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


Bruce Wayne
05-05-2012, 13:23
Добрый день!

Слышал я про такой параметр ярлыка, как target, т. е., объект, на который ярлык ссылается. Возможно ли как-то вывести этот параметр в текстовый файл?

Iska
05-05-2012, 13:51
Bruce Wayne, средствами заявленной категории — нет, не возможно возможно отчасти. Можно, например, средствами WSH.

Обычные ярлыки:
Option Explicit

With WScript.CreateObject("WScript.Shell")
WScript.Echo .CreateShortcut("C:\Documents and Settings\All Users\Главное меню\Программы\Стандартные\Paint.lnk").TargetPath
End With

WScript.Quit 0


Т.н. «Advertised shortcuts»:
Option Explicit

Dim strGUID_ProductCode
Dim strGUID_ComponentCode

Dim srtShortcutPath
Dim strTargetPath


With WScript.CreateObject("WindowsInstaller.Installer")
srtShortcutPath = "C:\Documents and Settings\All Users\Главное меню\Программы\Microsoft Office\Microsoft Office Word 2003.lnk"
'srtShortcutPath = "C:\Documents and Settings\All Users\Главное меню\Программы\Microsoft Office\Microsoft Office Excel 2003.lnk"
'srtShortcutPath = "C:\Documents and Settings\All Users\Главное меню\Программы\Microsoft Office\Microsoft Office Access 2003.lnk"
'srtShortcutPath = "C:\Documents and Settings\All Users\Главное меню\Программы\Skype\Skype.lnk"

With .ShortcutTarget(srtShortcutPath)
strGUID_ProductCode = .StringData(1)
strGUID_ComponentCode = .StringData(3)
End With

strTargetPath = .ComponentPath(strGUID_ProductCode, strGUID_ComponentCode)

WScript.Echo "Target path: ", strTargetPath
WScript.Echo "File version:", .FileVersion(strTargetPath)
End With

WScript.Quit 0

El Sanchez
05-05-2012, 13:59
Bruce Wayne, вариант через WMIC:

@Echo Off
SetLocal

Set LnkFilePath=C:\Users\Public\Desktop\f.e.a.r. 3.lnk

For /F "Tokens=1* Delims==" %%A In ('WMIC Path Win32_ShortcutFile Where ^"Name^=^'%%LnkFilePath:\^=\\%%^'^" Get Target /Value 2^>nul^|FindStr .') Do Echo:%%B>Log.log

Iska
05-05-2012, 14:27
El Sanchez, отчего не используете предикат «usebackq»:
@echo off
setlocal enableextensions enabledelayedexpansion

set sLnkFilePath=C:\Documents and Settings\All Users\Главное меню\Программы\Стандартные\Paint.lnk

for /f "usebackq tokens=1* delims==" %%i in (
`wmic.exe Path Win32_ShortcutFile where "Name='%sLnkFilePath:\=\\%'" Get Target /Value 2^>nul^|FindStr .`
) do echo %%j

endlocal
exit /b 0

?

El Sanchez
05-05-2012, 15:03
отчего не используете предикат «usebackq»: »
Iska, редко использую, поэтому забываю для чего он нужен.:)

Bruce Wayne
05-05-2012, 15:12
El Sanchez, Iska, спасибо вам огромное! А на XP такое можно провернуть?

Iska
05-05-2012, 18:42
El Sanchez, ясно. Просто проще использовать предикат, нежели экранировать символы.

Bruce Wayne, у меня как раз Windows XP. Само собой, у меня работает и код коллеги El Sanchez.

Bruce Wayne
05-05-2012, 22:39
Iska, странно, а у меня пишет, что

"wmic" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.

Может, использование этой программы зависит от состояния какой-либо службы? Разберусь с этим) Спасибо ещё раз за помощь! Вопрос исчерпан.

Iska
05-05-2012, 22:47
Bruce Wayne, «wmic.exe» отсутствует в Home-редакциях и ниже. У Вас какая редакция ОС использовалась?

Petya V4sechkin
06-05-2012, 07:50
Bruce Wayne, в дополнение к вышесказанному проверьте переменную PATH (http://forum.oszone.net/post-1896110.html#post1896110).

Bruce Wayne
06-05-2012, 13:14
Iska, у меня профессиональный выпуск, SP3, но правленый через nLite. Думаю, из-за этого.
Petya V4sechkin, нет, переменная чиста от лишних записей

Petya V4sechkin
06-05-2012, 13:36
переменная чиста от лишних записей
"Лишних" - это каких? Все наоборот.
Не в "лишних записях" дело, а в недостающих.

Файл WMIC.exe должен быть в папке \Windows\System32\wbem
А путь прописан в системной переменной PATH

El Sanchez
06-05-2012, 16:18
Bruce Wayne, раз WMI у вас скорее всего выпилен, то вариант №3:

@Echo Off
SetLocal
Set sLnkFilePath=c:\Users\ElSanchez\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Internet Explorer.lnk

Type "%sLnkFilePath%"|Find ":\"|FindStr /ir ^^[A-Z]:\\.*[.].*$>Log.log

Bruce Wayne
06-05-2012, 17:59
El Sanchez, огромное Вам спасибо!) Заработало!) Даже ещё быстрее, чем предыдущий.

Petya V4sechkin, да, действительно) У меня был неполный путь, только до папки system32) Извиняюсь.




© OSzone.net 2001-2012