PDA

Показать полную графическую версию : [решено] Показать имена всех EXE файлов в папке


Centrinar
05-03-2011, 17:38
Как показать имена всех EXE файлов в папке?

СПАСИБО!

Creat0R
05-03-2011, 18:06
Как показать имена всех EXE файлов в папке?
Включая подпапки?

#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <Array.au3>

$aReturn = _FileCMDSearch(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir), "*.exe")
_ArrayDisplay (http://dundats.mvps.org/help/html/libfunctions/_arraydisplay.htm)($aReturn)

;$iFlag = 0 - Files and folders (default)
;$iFlag = 1 - Only files
;$iFlag = 2 - Only folders
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _FileCMDSearch($sPath, $sFileMask, $iFlag = 0)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sOutBin, $sOut, $aOut, $sRead, $hDir, $sAttrib

Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $iFlag
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) 1
$sAttrib = ' /A-D'
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) 2
$sAttrib = ' /AD'
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$sAttrib = ' /A'
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)

$sOut = StringToBinary (http://www.autoitscript.com/autoit3/docs/functions/StringToBinary.htm)('0' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf), 2)
$aMasks = StringSplit (http://www.autoitscript.com/autoit3/docs/functions/StringSplit.htm)($sFileMask, ';')

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aMasks[0]
$hDir = Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)(@ComSpec (http://www.autoitscript.com/autoit3/docs/macros.htm#@comspec) & ' /U /C DIR "' & $sPath & '\' & $aMasks[$i] & '" /S /B' & $sAttrib, @SystemDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@systemdir), @SW_HIDE (http://www.autoitscript.com/autoit3/docs/macros.htm#@sw_hide), 6)

While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$sRead = StdoutRead (http://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm)($hDir, False (http://www.autoitscript.com/autoit3/docs/keywords.htm#False), True (http://www.autoitscript.com/autoit3/docs/keywords.htm#True))

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)
ExitLoop (http://www.autoitscript.com/autoit3/docs/keywords.htm#ExitLoop)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $sRead <> "" Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$sOut &= $sRead
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Wend (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

$aOut = StringRegExp (http://www.autoitscript.com/autoit3/docs/functions/StringRegExp.htm)(BinaryToString (http://www.autoitscript.com/autoit3/docs/functions/BinaryToString.htm)($sOut, 2), '[^\r\n]+', 3)

If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aOut) < 2 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)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)

$aOut[0] = UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aOut)-1
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) $aOut
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc)

Centrinar
05-03-2011, 20:29
Я запутался, а как сделать чтобы он не массив отображал а записал названия EXE в INI

Centrinar
06-03-2011, 23:10
:sorry:

Creat0R
06-03-2011, 23:59
как сделать чтобы он не массив отображал а записал названия EXE в INI »
См. в справке функций IniRead*.

Centrinar
07-03-2011, 00:16
IniWrite ты имел ввиду? А как инфу с массива считать?

Creat0R
07-03-2011, 00:23
IniWrite ты имел ввиду?
Я кажется написал IniRead.
А имел я в виду конкретно IniReadSection, которая прочитает секцию Ini в массив, таким образом можно отобразить содержимое Ini в _ArrayDisplay. Это ведь надо? Так по крайней мере я понял с предложения:
как сделать чтобы он не массив отображал а записал названия EXE в INI
хотя есть подозрение что нужно как раз наоборот (записать в Ini содержимое полученного массива с результатом поиска Exe файлов).

Centrinar
07-03-2011, 00:30
Creat0R - извини за мои глупые вопросы. Сам знаешь что в AutoIt я новенький, спасибо за твою помощь! Я имел ввиду записать в Ini содержимое полученного массива с результатом поиска Exe файлов

kaster
07-03-2011, 00:50
Centrinar, ты уже год как новенький :) неужто совсем не учишься?

Creat0R
07-03-2011, 01:03
записать в Ini содержимое полученного массива с результатом поиска Exe файлов »
Как то так:
$aReturn = _FileCMDSearch(@ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir), "*.exe")

For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) UBound (http://www.autoitscript.com/autoit3/docs/functions/UBound.htm)($aReturn)-1
IniWrite (http://www.autoitscript.com/autoit3/docs/functions/IniWrite.htm)("file.ini", "Exe Section", $i, $aReturn[$i])
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)

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

AZJIO
15-03-2011, 21:15
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
Проблема если скрипт запускать с Флешки, он после @ScriptDir ставит еще одну "\"
Самое простое:
$Path= @ScriptDir & '\exefiles\'
$Path=StringReplace( $Path, "\\", "\")

madmasles
15-03-2011, 21:30
в итоге он пишет: 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
Большое спасибо, очень пригодилось!




© OSzone.net 2001-2012