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

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Показать имена всех EXE файлов в папке (http://forum.oszone.net/showthread.php?t=201215)

Centrinar 05-03-2011 17:38 1628009

Показать имена всех EXE файлов в папке
 
Как показать имена всех EXE файлов в папке?

СПАСИБО!

Creat0R 05-03-2011 18:06 1628024

Цитата:

Как показать имена всех EXE файлов в папке?
Включая подпапки?

Код:

#include <Array.au3>

$aReturn = _FileCMDSearch(@ScriptDir, "*.exe")
_ArrayDisplay($aReturn)

;$iFlag = 0 - Files and folders (default)
;$iFlag = 1 - Only files
;$iFlag = 2 - Only folders
Func _FileCMDSearch($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 Or UBound($aOut) < 2 Then
        Return SetError(1)
    EndIf

    $aOut[0] = UBound($aOut)-1
    Return $aOut
EndFunc


Centrinar 05-03-2011 20:29 1628138

Я запутался, а как сделать чтобы он не массив отображал а записал названия EXE в INI

Centrinar 06-03-2011 23:10 1628976

:sorry:

Creat0R 06-03-2011 23:59 1629009

Цитата:

Цитата Centrinar
как сделать чтобы он не массив отображал а записал названия EXE в INI »

См. в справке функций IniRead*.

Centrinar 07-03-2011 00:16 1629018

IniWrite ты имел ввиду? А как инфу с массива считать?

Creat0R 07-03-2011 00:23 1629023

Цитата:

IniWrite ты имел ввиду?
Я кажется написал IniRead.
А имел я в виду конкретно IniReadSection, которая прочитает секцию Ini в массив, таким образом можно отобразить содержимое Ini в _ArrayDisplay. Это ведь надо? Так по крайней мере я понял с предложения:
Цитата:

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

Centrinar 07-03-2011 00:30 1629029

Creat0R - извини за мои глупые вопросы. Сам знаешь что в AutoIt я новенький, спасибо за твою помощь! Я имел ввиду
Цитата:

записать в Ini содержимое полученного массива с результатом поиска Exe файлов

kaster 07-03-2011 00:50 1629047

Код:

Centrinar, ты уже год как новенький :) неужто совсем не учишься?

Creat0R 07-03-2011 01:03 1629053

Цитата:

Цитата Centrinar
записать в Ini содержимое полученного массива с результатом поиска Exe файлов »

Как то так:
Код:

$aReturn = _FileCMDSearch(@ScriptDir, "*.exe")

For $i = 1 To UBound($aReturn)-1
    IniWrite("file.ini", "Exe Section", $i, $aReturn[$i])
Next


Centrinar 15-03-2011 20:45 1635704

Проблема если скрипт запускать с Флешки, он после @ScriptDir ставит еще одну "\" т.е. я указываю $aReturn = _FileCMDSearch(@ScriptDir & "\exefiles\, "*.exe") в итоге он пишет: D:\\exefiles\...
Как решить данную проблему?

AZJIO 15-03-2011 21:15 1635729

Centrinar, смотри, должно работать, только я для примера DLL ещё указал.
Код:

; пишем тут что нам нужно
$aga_papka="C:\Program Files\K-Lite Codec Pack"
$aga_tupi="exe;dll"

; дальше ничего не трогаем
Global $Stack[50], $Stack1[50]

$Text =''
FileFindNextFirst($aga_papka)
While 1
    $tempname = FileFindNext($aga_tupi,1)
    If Not $tempname Then ExitLoop
    $Text &= $tempname & @CRLF
WEnd

;пишем в файл
$file = FileOpen(@ScriptDir&'\вот_они_EXE.ini',2)
FileWrite($file, $Text)
FileClose($file)

Func FileFindNextFirst($FindCat)
    $Stack[0] = 1
    $Stack1[1] = $FindCat
    $Stack[1] = FileFindFirstFile($FindCat & "\*.*")
    Return $Stack[1]
EndFunc  ;==>FileFindNextFirst

;$mode=0 - файлы
;$mode=1 - типы файлов
;$mode=2 - каталоги
;$Level=  от 1 до 49
;$type = может иметь перечисление расширений, например exe;dll;com точнее $tempname = FileFindNext('exe;dll;com',1,1)
Func FileFindNext($type = 'log', $mode = 0, $Level = 49)
    While 1
        $file = FileFindNextFile($Stack[$Stack[0]])
        If @error Then
            FileClose($Stack[$Stack[0]])
            If $Stack[0] = 1 Then
                Return ""
            Else
                $Stack[0] -= 1
                ContinueLoop
            EndIf
        Else
            If StringInStr(FileGetAttrib($Stack1[$Stack[0]] & "\" & $file), "D") > 0 Then
                If $Stack[0] = $Level Then ContinueLoop
                $Stack[0] += 1
                $Stack1[$Stack[0]] = $Stack1[$Stack[0] - 1] & "\" & $file
                $Stack[$Stack[0]] = FileFindFirstFile($Stack1[$Stack[0]] & "\*.*")
                If $mode = 2 Then
                    Return $Stack1[$Stack[0]]
                Else
                    ContinueLoop
                EndIf
            Else
                If $mode = 2 Then ContinueLoop
                If $mode = 1 Then
                    ;If StringInStr (';'&$type&';', ';'&StringRight($Stack1[$Stack[0]] & "\" & $file, 3)&';')=0  Then
                    If StringInStr (';'&$type&';', ';'&StringRegExpReplace($Stack1[$Stack[0]] & "\" & $file, '.*\.(\S+)', '\1')&';')=0  Then
                        ContinueLoop
                    Else
                        Return $Stack1[$Stack[0]] & "\" & $file
                    EndIf
                Else
                    Return $Stack1[$Stack[0]] & "\" & $file
                EndIf
            EndIf
        EndIf
    WEnd
EndFunc  ;==>FileFindNext


beve 15-03-2011 21:27 1635739

Цитата:

Проблема если скрипт запускать с Флешки, он после @ScriptDir ставит еще одну "\"
Самое простое:
Код:

$Path= @ScriptDir & '\exefiles\'
$Path=StringReplace( $Path, "\\", "\")


madmasles 15-03-2011 21:30 1635744

Цитата:

Цитата Centrinar
в итоге он пишет: D:\\exefiles\... »

Код:

$s_Dir = 'E:\' & '\exefiles\'
MsgBox(64, 'До', $s_Dir)
If StringInStr($s_Dir, '\\') Then
    $s_Dir = StringReplace($s_Dir, '\\', '\')
EndIf
MsgBox(64, 'После', $s_Dir)


masterdos 21-03-2011 22:21 1640498

Большое спасибо, очень пригодилось!


Время: 21:20.

Время: 21:20.
© OSzone.net 2001-