Что нового

поиск файла и последующий его запуск

fixik

Новичок
Сообщения
29
Репутация
0
есть файл с конкретным именем на системном диске, его необходимо найти и запустить, когда он будет найден. я проглядел все темы по поводу Поиска файлов, но не нашел подходящего для меня решения. по возможности лучше использовать макрос системного диска, а не конкретно диск C:\

может быть задачу упростит то, что файл будет находиться в одной папке (или еще одной подпапке) вместе со скриптом.

буду очень благодарен за оба варианта (просто поиск по системному диску или в папке где находится сам скрипт).

это не вирусы - просто портабельный софт.

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
fixik [?]
я проглядел все темы по поводу Поиска файлов
Хочу посмотреть на ссылки этих тем.

лучше использовать макрос системного диска, а не конкретно диск C:\
@HomeDrive?

просто поиск по системному диску или в папке где находится сам скрипт
В папке без подкаталогов ищет _FileListToArray (см. справку по UDF), но если я правильно понял, то достаточно использовать макрос @ScriptDir.
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
CreatoR [?]
Хочу посмотреть на ссылки этих тем.
начиная с этой: http://autoit-script.ru/index.php?topic=1812.0 и заканчивая темой на осзон
пытался подставлять свои значения, но получал либо ошибку либо просто висяк.
конечно возможно я что то не так делаю :-[
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik,
Если Вы все везде посмотрели, то в чем проблема, не понимаю?
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles
для вас уже все просто, я же с недельным стажем... :smile:
для меня и то достижение, что сумел найти с помощью какой кнопки активировать пункт меню программы ;D
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik,
В той теме, ссылку на которую Вы указали, ИМХО, есть решение Вашей проблемы (вопроса). Найдите файл и ShellExecute() Вам в помощь. :smile:
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles, этот скрипт использовать?
сообщения #1:', 'http://autoit-script.ru/index.php?topic=1812.msg12894#msg12894'));

и если честно мне не совсем понятен формат комманды на запуск, когда файл найден.
как правильно ее написать?


Добавлено:
Сообщение автоматически объединено:

madmasles
где же ты раньше был с подсказкой на ShellExecute() ;D
все решил гораздо проще - просто поместил в одну папку со скриптом линк на программу и запустил ее с помощью ShellExecute() :beer:

:IL_AutoIt_1:

вот уж прав сказавший: "Легко усложнять. Тяжело упрощать".
 

VladUs

Скриптер
Сообщения
621
Репутация
181
Попробуйте еще здесь посмотреть http://autoit-script.ru/index.php?topic=315.0
Вот пример на основе интересного решения от Creatorа из вышеуказанной темы


Код:
$aOut = _FileSearch("C:", "Notepad.exe", 1)
Run($aOut[1])
    
Func _FileSearch($sPath, $sFileMask, $iFlag = 0)
    Local $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib
    
    Switch $iFlag
        Case 1
            $sAttrib = ' /A-D'
        Case 2 
            $sAttrib = ' /AD'
        Case Else 
            $sAttrib = ' /A'
    EndSwitch
    
    $sOut = StringToBinary('0' & @CRLF, 2)
    $aMasks = StringSplit($sFileMask, ';')
    
    For $i = 1 To $aMasks[0]
        $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)
        
        While 1
            $sRead = StdoutRead($hDir, False, True)
            
            If @error Then
                ExitLoop
            EndIf
            
            If $sRead <> "" Then
                $sOut &= $sRead
            EndIf
        Wend
    Next
    
    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)
    
    If @error Then
        Return SetError(1)
    EndIf
    
    $aOut[0] = UBound($aOut)-1
    
    Return $aOut
 EndFunc
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
VladUs,
Где-то уже писал, если $sPath (папка начала поиска) диск, то лучше добавить в начале
Код:
;...
If StringRight($sPath, 1) == '\' Then ;нужно, если $sPath - диск (например C:\)
		$sPath = StringTrimRight($sPath, 1)
EndIf
;...
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles, а можно в этой строке:
Код:
$aOut = _FileSearch(@HomeDrive, "avz.exe", 1)
задать дополнительные параметры?
к примеру так:
Код:
$aOut = _FileSearch(@HomeDrive or @DesktopDir or @AppDataDir or @HomePath or @HomeShare, "мой файл", 1)
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik,
В этой конкретной функции _FileSearch() нет.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
fixik,
Может так попробовать?
Код:
$sFileSearch = 'MySearchFile.au3'
$sPath = ''
Dim $aDirSearch[4] = [3, @AppDataDir, @DesktopDir, @HomeDrive]

For $i = 1 To $aDirSearch[0]
	$aTempSearch = _FileSearch($aDirSearch[$i], $sFileSearch, 1)
	If $aTempSearch[0] Then
		$sPath = $aTempSearch[1]
		ExitLoop
	EndIf
Next
If $sPath Then
	MsgBox(64, 'Info', $sPath)
Else
	MsgBox(16, 'Error', 'No ' & $sFileSearch)
EndIf


Func _FileSearch(;...
;...
 
Автор
F

fixik

Новичок
Сообщения
29
Репутация
0
madmasles
вариант предложенный VladUs, работает. просто поиск идет секунд 15-20.
я хотел сузить области поиска и тем самым ускорить процесс хоть чуть чуть.
 

Arei

Скриптер
Сообщения
938
Репутация
115
ну а 4 раза функцию, вызвать нельзя?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
fixik [?]
хотел сузить области поиска и тем самым ускорить процесс хоть чуть чуть
Попробуй использовать RecFileListToArray, работает довольно быстро, и при этом имеет множество возможностей.
 
Верх