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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Создать ярлык(s) к файлам @ScriptDir & "\Folder\* \*.exe" (http://forum.oszone.net/showthread.php?t=166116)

semiono 03-02-2010 16:09 1337956

Создать ярлык(s) к файлам @ScriptDir & "\Folder\* \*.exe"
 
Собсно вопрос.
Создать (где нибудь) ярлык(и) к файлам @ScriptDir & "\Folder \ подфолдерс \ все файлы *.exe"
Уровень вложенности директорий можно сказать что определён, но количество файлов и имён надо определить авто.

Creat0R 03-02-2010 16:41 1337995

Код:

#include <File.au3>

_FileCreateShortcut(@ScriptDir & "\Folder\подфолдерс", "*.exe")

Func _FileCreateShortcut($sPath, $sFilter, $sWorkDir="", $sArgs="", $sDesc="", $sIcon="", $sHotKey="", $iIconID=0, $iState=0)
    $aFiles = _FileListToArray($sPath, $sFilter, 1)
    If @error Then Return SetError(1, 0, 0)

    For $i = 1 To $aFiles[0]
        FileCreateShortcut( _
            $sPath & "\" & $aFiles[$i], _
            $sPath & "\" & StringRegExpReplace($aFiles[$i], "\.[^\.]*$", "") & ".lnk", _
            $sWorkDir, $sArgs, $sDesc, $sIcon, $sHotKey, $iIconID, $iState)
    Next
EndFunc


madmasles 03-02-2010 16:52 1338006

А у меня таким образом создается ярлык на папку, а через него получаю доступ ко всем подпапкам и файлам внутри.
Код:

FileCreateShortcut("MyFolder", "MyShortcut.lnk")
Creat0R,
У меня, почему-то, при использовании Вашей функции создаются ярлыки с именем filelnk. Поставил точку перед "lnk"
Код:

...StringRegExpReplace($aFiles[$i], "\.[^\.]*$", "") & ".lnk"...
и стало все в порядке. Почему? Точка ведь в исключениях или нет?

semiono 03-02-2010 18:18 1338088

Есть проблема! Я думал сразу понятно будет....
Программы в папках лежат

Ну да я тут сам сморозил
Цитата:

подфолдерс \ все файлы *.exe"
можно подумать что все exe в одной папке лежат.

Но надо так:
Общий_рут\Папка_проги1\???.EXE
Общий_рут\Папка_проги2\???.EXE
Общий_рут\Папка_проги3\???.EXE

Так обычно и встречается часто. И понятно что поиск тут сложней, поэтому я и не берусь "думать" :)
Ярлыки лучше в общую папку слить, например на рабочий стол - %UserProfile%\Desktop
хотя это не принципиально, лишь бы они в одной паки были.

Заранее благодарю!!!

Цитата:

Цитата madmasles
А у меня таким образом создается ярлык на папку, а через него получаю доступ ко всем подпапкам и файлам внутри. »

Поэтому и надо что у меня в подпапках дальше добираться :)

madmasles 03-02-2010 18:58 1338118

У меня так получилось:
Код:

$avArray = _FileSearch(@ScriptDir & "\Folder", "*.exe")
DirCreate(@DesktopDir & "\MyShortcut")
For $i = 1 To $avArray[0]
    $name = StringTrimRight(StringTrimLeft($avArray[$i], StringInStr($avArray[$i], "\", "", -1)), 4)
    FileCreateShortcut($avArray[$i], @DesktopDir & "\MyShortcut\" & $name & ".lnk")
Next

Func
_FileSearch($sPath, $sFileMask)
    Local $iPID, $sStdOutRead, $aRet

    $iPID
= Run(@ComSpec & ' /C Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)

    While 1
        $sStdOutRead &= StdoutRead($iPID)
        If @error <> 0 Then ExitLoop
    WEnd


    $aRet = StringSplit(StringStripCR(StringStripWS($sStdOutRead, 3)), @LF)
    Return SetError(@error, 0, $aRet)
EndFunc  ;==>_FileSearch

PS
Функция Creat0R _FileSearch($sPath, $sFileMask)

PPS
Если в пути встречаются русские буквы, то не работает.

madmasles 03-02-2010 19:45 1338165

Вот так нормально отрабатывает с русскими буквами в путях:

Код:

#include <Encoding.au3>

$avArray = _FileSearch(@ScriptDir & "\Folder", "*.exe")
DirCreate(@DesktopDir & "\MyShortcut")
For $i = 1 To $avArray[0]
    $name = StringTrimRight(StringTrimLeft($avArray[$i], StringInStr($avArray[$i], "\", "", -1)), 4)
    FileCreateShortcut(_Encoding_CyrillicTo1251($avArray[$i]), @DesktopDir & "\MyShortcut\" & $name & ".lnk")
Next

Func
_FileSearch($sPath, $sFileMask)
    Local $iPID, $sStdOutRead, $aRet

    $iPID
= Run(@ComSpec & ' /C Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)

    While 1
        $sStdOutRead &= StdoutRead($iPID)
        If @error <> 0 Then ExitLoop
    WEnd


    $aRet = StringSplit(StringStripCR(StringStripWS($sStdOutRead, 3)), @LF)
    Return SetError(@error, 0, $aRet)
EndFunc  ;==>_FileSearch

UDF от Creat0R Encoding_UDF.zip

Creat0R 03-02-2010 21:40 1338276

Цитата:

Цитата madmasles
Поставил точку перед "lnk" »

Да, это я упустил.

Цитата:

Цитата madmasles
Вот так нормально отрабатывает с русскими буквами в путях »

А если просто добавить chcp 1251 & перед Dir? :)

semiono 04-02-2010 15:49 1338909

Цитата:

Цитата madmasles
Если в пути встречаются русские буквы, то не работает. »

Русские буквы в файлах втопку! Я даже с пробелами борюсь у себя. :) А скрипт лично мне самому надо. :coffee:
Надеюсь уже не глючит, тему закрываю. :) Спасибо_!

madmasles 04-02-2010 16:09 1338922

semiono,
Вы лучше проверьте, а то у меня работает, а у Вас не будет.
Во втором варианте ( с #include <Encoding.au3>) у меня нет проблем ни с русскими буквами, ни с пробелами в путях.

semiono 04-02-2010 16:16 1338931

madmasles, я запустил скрипт (забыл путь указать реальный) и у меня один shortcut на столе создался с именем .lnk усказывает на MyComputer :) Но потом всё наладил! Это просто инфа к дебуг информации )
Второй скрипт я не проверял, у меня <Encoding.au3> нету, а на форум я что-то не зарегистрировался,
неужели semiono кто-то там юзает или это я был не помню :) Потом проверю, а инклюд лучше бы в личку сюда было. Но спасибо полюбому! П.С. Не знаю толку от меня на автоит.ру никакого, даже стыдно региться... Лишь для своей пользы чтоль :)

Creat0R 04-02-2010 16:37 1338947

Цитата:

Цитата semiono
у меня <Encoding.au3> нету »

Да он собственно не нужен в этом случае, chcp 1251 должна устранить проблему с кодировкой.

Цитата:

Цитата semiono
Лишь для своей пользы чтоль »

Ну так оно и задуманно для этой цели - приносить пользу таким юзерам как ты :)

madmasles 04-02-2010 17:18 1338985

Creat0R,
Я примерно год назад мучался с этими кодировками (Windows-1251 и DOS-866) в командной строке. Ничего у меня не получилось с русскими буквами. Там что-то кривое было, то ли система, то ли руки (скорей всего - второе). Теперь, когда я нашел Вашу Encoding_UDF (огромное спасибо за нее и не только за нее), все проблемы с кодировками ушли в прошлое!!! :laiel: Стыдно признаться, но я просто не знаю как
Цитата:

Цитата Creat0R
...просто добавить chcp 1251 & перед Dir?... »


semiono 04-02-2010 18:00 1339020

Я решил внедриться в этот код чуть чуть :)

Код:

...
        $wkdr = StringTrimRight($avArray[$i], StringLen($name) + 5)
        $_ico = StringTrimRight($avArray[$i], 4)
    FileCreateShortcut($avArray[$i], @ProgramsDir & "\Proton\" & $name & ".lnk", $wkdr, "", $name,  $_ico & ".ico", "", 0)

Люблю чтоб красиво. У меня на самом деле .ico ко всем файликам рядом лежат,
правда это только мою личную "проблему" выправляет:

[HKLM\Software\Classes\exefile\DefaultIcon]
@ ="C:\I\Icons\exec.ico"

Но зато я по автоиту научился трим юзать :)

И ещё папку меню заодно украсил
Код:

FileSetAttrib(@ProgramsDir & "\Proton","+R", 0)

IniWrite(@ProgramsDir & "\Proton\desktop.ini", ".ShellClassInfo", "InfoTip", "Proton..." )
IniWrite(@ProgramsDir & "\Proton\desktop.ini", ".ShellClassInfo", "IconFile", "%SystemRoot%\system32\shell32.dll")
IniWrite(@ProgramsDir & "\Proton\desktop.ini", ".ShellClassInfo", "IconIndex", "-9")


Creat0R 04-02-2010 18:33 1339040

Цитата:

Цитата madmasles
как
...просто добавить chcp 1251 & перед Dir? »

Код:

$iPID = Run(@ComSpec & ' /C ChCp 1251 & Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)

semiono 04-02-2010 19:03 1339067

offtop: а я вот всегда удивляюсь зачем @ComSpec используют, я когда раньше хелп не читал вообще, cmd.exe юзал...
а что его может не быть в system32 или что-то ещё? или это просто пример хорошего тона юзать переменную?
даже меньше символов писать )

Creat0R 04-02-2010 19:11 1339075

Цитата:

Цитата semiono
offtop »

Для этого есть тег off ;)

Цитата:

Цитата semiono
это просто пример хорошего тона юзать переменную? »

Угу, и это называется макрос а не переменная.

Creat0R 05-02-2010 00:20 1339324

Сообщения сформировавшегося офтопа (кроме последних двух, не включая моего) перенёс в тему:
[решено] Рекурсивный поиск файла.
А последние сообщения отделил в новую тему:
Как скомпилировать консольное приложение


Время: 22:41.

Время: 22:41.
© OSzone.net 2001-