Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Получить target ярлыка (http://forum.oszone.net/showthread.php?t=234089)

Bruce Wayne 05-05-2012 13:23 1910954

Получить target ярлыка
 
Добрый день!

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

Iska 05-05-2012 13:51 1910974

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 1910983

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 1910997

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 1911018


Цитата:

Цитата Iska
отчего не используете предикат «usebackq»: »

Iska, редко использую, поэтому забываю для чего он нужен.:)

Bruce Wayne 05-05-2012 15:12 1911023

El Sanchez, Iska, спасибо вам огромное! А на XP такое можно провернуть?

Iska 05-05-2012 18:42 1911109

El Sanchez, ясно. Просто проще использовать предикат, нежели экранировать символы.

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

Bruce Wayne 05-05-2012 22:39 1911241

Iska, странно, а у меня пишет, что

Код:

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

Iska 05-05-2012 22:47 1911249

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

Petya V4sechkin 06-05-2012 07:50 1911340

Bruce Wayne, в дополнение к вышесказанному проверьте переменную PATH.

Bruce Wayne 06-05-2012 13:14 1911422

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

Petya V4sechkin 06-05-2012 13:36 1911426

Цитата:

Цитата Bruce Wayne
переменная чиста от лишних записей

"Лишних" - это каких? Все наоборот.
Не в "лишних записях" дело, а в недостающих.

Цитата:

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


El Sanchez 06-05-2012 16:18 1911490

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 1911540

El Sanchez, огромное Вам спасибо!) Заработало!) Даже ещё быстрее, чем предыдущий.

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


Время: 18:14.

Время: 18:14.
© OSzone.net 2001-