Показать полную графическую версию : [решено] Создать ярлык(s) к файлам @ScriptDir & "\Folder\* \*.exe"
Собсно вопрос.
Создать (где нибудь) ярлык(и) к файлам @ScriptDir & "\Folder \ подфолдерс \ все файлы *.exe"
Уровень вложенности директорий можно сказать что определён, но количество файлов и имён надо определить авто.
#include <File.au3>
_FileCreateShortcut(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@ScriptDir) & "\Folder\подфолдерс", "*.exe")
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _FileCreateShortcut($sPath, $sFilter, $sWorkDir="", $sArgs="", $sDesc="", $sIcon="", $sHotKey="", $iIconID=0, $iState=0)
$aFiles = _FileListToArray($sPath, $sFilter, 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1, 0, 0)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aFiles[0]
FileCreateShortcut (http://www.autoitscript.com/autoit3/docs/functions/FileCreateShortcut.htm)( _
$sPath & "\" & $aFiles[$i], _
$sPath & "\" & StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aFiles[$i], "\.[^\.]*$", "") & ".lnk", _
$sWorkDir, $sArgs, $sDesc, $sIcon, $sHotKey, $iIconID, $iState)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)
madmasles
03-02-2010, 16:52
А у меня таким образом создается ярлык на папку, а через него получаю доступ ко всем подпапкам и файлам внутри.
FileCreateShortcut("MyFolder", "MyShortcut.lnk")
Creat0R,
У меня, почему-то, при использовании Вашей функции создаются ярлыки с именем filelnk. Поставил точку перед "lnk" ...StringRegExpReplace($aFiles[$i], "\.[^\.]*$", "") & ".lnk"... и стало все в порядке. Почему? Точка ведь в исключениях или нет?
Есть проблема! Я думал сразу понятно будет....
Программы в папках лежат
Ну да я тут сам сморозил
подфолдерс \ все файлы *.exe"
можно подумать что все exe в одной папке лежат.
Но надо так:
Общий_рут\Папка_проги1\???.EXE
Общий_рут\Папка_проги2\???.EXE
Общий_рут\Папка_проги3\???.EXE
Так обычно и встречается часто. И понятно что поиск тут сложней, поэтому я и не берусь "думать" :)
Ярлыки лучше в общую папку слить, например на рабочий стол - %UserProfile%\Desktop
хотя это не принципиально, лишь бы они в одной паки были.
Заранее благодарю!!!
А у меня таким образом создается ярлык на папку, а через него получаю доступ ко всем подпапкам и файлам внутри. »
Поэтому и надо что у меня в подпапках дальше добираться :)
madmasles
03-02-2010, 18:58
У меня так получилось:
$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) (http://forum.oszone.net/post-1326507-17.html)
PPS
Если в пути встречаются русские буквы, то не работает.
madmasles
03-02-2010, 19:45
Вот так нормально отрабатывает с русскими буквами в путях:
#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 (http://autoit-script.ru/index.php?action=downloads;sa=view;down=6)
Поставил точку перед "lnk" »
Да, это я упустил.
Вот так нормально отрабатывает с русскими буквами в путях »
А если просто добавить chcp 1251 & перед Dir? :)
Если в пути встречаются русские буквы, то не работает. »
Русские буквы в файлах втопку! Я даже с пробелами борюсь у себя. :) А скрипт лично мне самому надо. :coffee:
Надеюсь уже не глючит, тему закрываю. :) Спасибо_!
madmasles
04-02-2010, 16:09
semiono,
Вы лучше проверьте, а то у меня работает, а у Вас не будет.
Во втором варианте ( с #include <Encoding.au3>) у меня нет проблем ни с русскими буквами, ни с пробелами в путях.
madmasles, я запустил скрипт (забыл путь указать реальный) и у меня один shortcut на столе создался с именем .lnk усказывает на MyComputer :) Но потом всё наладил! Это просто инфа к дебуг информации )
Второй скрипт я не проверял, у меня <Encoding.au3> нету, а на форум я что-то не зарегистрировался,
неужели semiono кто-то там юзает или это я был не помню :) Потом проверю, а инклюд лучше бы в личку сюда было. Но спасибо полюбому! П.С. Не знаю толку от меня на автоит.ру никакого, даже стыдно региться... Лишь для своей пользы чтоль :)
у меня <Encoding.au3> нету »
Да он собственно не нужен в этом случае, chcp 1251 должна устранить проблему с кодировкой.
Лишь для своей пользы чтоль »
Ну так оно и задуманно для этой цели - приносить пользу таким юзерам как ты :)
madmasles
04-02-2010, 17:18
Creat0R,
Я примерно год назад мучался с этими кодировками (Windows-1251 и DOS-866) в командной строке. Ничего у меня не получилось с русскими буквами. Там что-то кривое было, то ли система, то ли руки (скорей всего - второе). Теперь, когда я нашел Вашу Encoding_UDF (огромное спасибо за нее и не только за нее), все проблемы с кодировками ушли в прошлое!!! :laiel: Стыдно признаться, но я просто не знаю как ...просто добавить chcp 1251 & перед Dir?... »
Я решил внедриться в этот код чуть чуть :)
...
$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")
как
...просто добавить chcp 1251 & перед Dir? »
$iPID = Run(@ComSpec & ' /C ChCp 1251 & Dir "' & $sPath & '\' & $sFileMask & '" /S /B /A RASH', @SystemDir, @SW_HIDE, 6)
offtop: а я вот всегда удивляюсь зачем @ComSpec используют, я когда раньше хелп не читал вообще, cmd.exe юзал...
а что его может не быть в system32 или что-то ещё? или это просто пример хорошего тона юзать переменную?
даже меньше символов писать )
offtop »
Для этого есть тег off ;)
это просто пример хорошего тона юзать переменную? »
Угу, и это называется макрос а не переменная.
Сообщения сформировавшегося офтопа (кроме последних двух, не включая моего) перенёс в тему:
[решено] Рекурсивный поиск файла (http://forum.oszone.net/thread-164080.html).
А последние сообщения отделил в новую тему:
Как скомпилировать консольное приложение (http://forum.oszone.net/showthread.php?t=166309)
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.