[CMD/BAT] Узнать свойства ярлыка (что он запускает + аргументы)

Moxito

Разработчик
Сообщения
194
Симпатии
31
Баллы
33
#1
Здравствуйте. Нужно узнать свойства ярлыка (т.е. типо "c:\kek\ee.exe -browser -https") всех ярлыков на рабочем столе. Заранее спасибо!
Можно VBS, PowerShell, только к VBS поясните как выполнить в cmd.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#2
js + cmd

Java:
@set @x=0; /*
@cscript //nologo /e:jscript "%~f0"
@pause
@exit /b
 
*/
var oShell = new ActiveXObject("WScript.Shell");
var sDesktop_1 = oShell.SpecialFolders("Desktop");
var sDesktop_2 = oShell.SpecialFolders("AllUsersDesktop");
showLnk(sDesktop_1);
showLnk(sDesktop_2);

function showLnk(path)
{
    var sPath;
    var oFolder = new ActiveXObject("Shell.Application").NameSpace(path);
    for (var oEnum = new Enumerator (oFolder.Items()); !oEnum.atEnd(); oEnum.moveNext() ) {
        sPath = oEnum.item().Path;
        if (sPath.substr(sPath.length - 4).toUpperCase() == '.LNK')
            WScript.Echo(sPath + ' => ' + oShell.CreateShortcut(sPath).TargetPath);
    }
}
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#3
В итоге, в CST воспользовались вариантом на Powershell, который упускает часть ярлыков. (еще и не работает на XP даже если установить Powershell).
Код:
powershell -command "&{$shell=New-Object -ComObject WScript.Shell;ls "$env:USERPROFILE\Desktop\*.lnk"|%%{$shell.CreateShortcut($_.FullName)}|ft -a FullName,TargetPath,Arguments,WorkingDirectory}" >> "%readlnk%"
Т.е. не потрудились даже изучить как работает то, что было предложено вам в теме. :(
 
Последнее редактирование:

Moxito

Разработчик
Сообщения
194
Симпатии
31
Баллы
33
#4
@Dragokas
Вчера интернет выключили после 22. Был вопрос:
Ошибка выполнения Microsoft JScript: 'pause' - определение отсутствует
как выйти из js режима?
 
Последнее редактирование:

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#5
У меня нету никакой ошибки. Вы код точно скопировали?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#7
В коде выше уже есть пауза, ничего добавлять не нужно.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#9
После команды pause, например.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#11
Можно. В строке cscript используйте >>
 

Moxito

Разработчик
Сообщения
194
Симпатии
31
Баллы
33
#12
js + cmd

Java:
@set @x=0; /*
@cscript //nologo /e:jscript "%~f0"
@pause
@exit /b

*/
var oShell = new ActiveXObject("WScript.Shell");
var sDesktop_1 = oShell.SpecialFolders("Desktop");
var sDesktop_2 = oShell.SpecialFolders("AllUsersDesktop");
showLnk(sDesktop_1);
showLnk(sDesktop_2);

function showLnk(path)
{
    var sPath;
    var oFolder = new ActiveXObject("Shell.Application").NameSpace(path);
    for (var oEnum = new Enumerator (oFolder.Items()); !oEnum.atEnd(); oEnum.moveNext() ) {
        sPath = oEnum.item().Path;
        if (sPath.substr(sPath.length - 4).toUpperCase() == '.LNK')
            WScript.Echo(sPath + ' => ' + oShell.CreateShortcut(sPath).TargetPath);
    }
}
При коде
CMD/BATCH:
@echo off
chcp 866>Nul
goto nextstepone
:packandexit
echo :: Packing :: >> "%packarchive%"
set ddaattee=%date%
if %errorlevel% EQU 0 (
    echo Архив создан! Имя: log_%ddaattee%
) else (
    echo Архив не создан! Упакуйте папку "log" самостоятельно.
    echo Информация:
    echo Код ошибки: %errorlevel%
    echo Error code: %errorlevel% >> "%packarchive%"
    echo Тип: WinRAR
)
echo Нажмите на любую клавишу для завершения работы скрипта (это конец создания логов).
pause>nul
exit /b 0


:nextstepone
@echo on>nul
@set @x=0; /*
@cscript //nologo /e:jscript "%~f0"
@goto packandexit
 
*/
var oShell = new ActiveXObject("WScript.Shell");
var sDesktop_1 = oShell.SpecialFolders("Desktop");
var sDesktop_2 = oShell.SpecialFolders("AllUsersDesktop");
showLnk(sDesktop_1);
showLnk(sDesktop_2);

function showLnk(path)
{
    var sPath;
    var oFolder = new ActiveXObject("Shell.Application").NameSpace(path);
    for (var oEnum = new Enumerator (oFolder.Items()); !oEnum.atEnd(); oEnum.moveNext() ) {
        sPath = oEnum.item().Path;
        if (sPath.substr(sPath.length - 4).toUpperCase() == '.LNK')
            WScript.Echo(sPath + ' => ' + oShell.CreateShortcut(sPath).TargetPath);
    }
}

    }
}
бьёт за условную компиляцию, якобы она выключена
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#13
Вы забыли добавить знак комментария /* в начало пакетного файла.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
5,962
Симпатии
5,784
Баллы
588
#14
Почему бы тебе не "отделить мух от котлет"? Разделить гибрид на 2 файла, отдельно CMD, отдельно JS, чтобы каждый раз не наступать на грабли.
 
Сверху Снизу