-
AutoIt
(
http://forum.oszone.net/forumdisplay.php?f=103)
Показать имена всех EXE файлов в папке
Как показать имена всех EXE файлов в папке?
СПАСИБО!
|
Цитата:
Как показать имена всех 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
|
Я запутался, а как сделать чтобы он не массив отображал а записал названия EXE в INI
|
Цитата:
Цитата Centrinar
как сделать чтобы он не массив отображал а записал названия EXE в INI »
|
См. в справке функций IniRead*.
|
IniWrite ты имел ввиду? А как инфу с массива считать?
|
Я кажется написал IniRead.
А имел я в виду конкретно IniReadSection, которая прочитает секцию Ini в массив, таким образом можно отобразить содержимое Ini в _ArrayDisplay. Это ведь надо? Так по крайней мере я понял с предложения:
Цитата:
как сделать чтобы он не массив отображал а записал названия EXE в INI
|
хотя есть подозрение что нужно как раз наоборот (записать в Ini содержимое полученного массива с результатом поиска Exe файлов).
|
Creat0R - извини за мои глупые вопросы. Сам знаешь что в AutoIt я новенький, спасибо за твою помощь! Я имел ввиду
Цитата:
записать в Ini содержимое полученного массива с результатом поиска Exe файлов
|
|
Код:
Centrinar, ты уже год как новенький :) неужто совсем не учишься?
|
Цитата:
Цитата Centrinar
записать в Ini содержимое полученного массива с результатом поиска Exe файлов »
|
Как то так:
|
Проблема если скрипт запускать с Флешки, он после @ScriptDir ставит еще одну "\" т.е. я указываю $aReturn = _FileCMDSearch(@ScriptDir & "\exefiles\, "*.exe") в итоге он пишет: D:\\exefiles\...
Как решить данную проблему?
|
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
|
Цитата:
Проблема если скрипт запускать с Флешки, он после @ScriptDir ставит еще одну "\"
|
Самое простое:
Код:
$Path= @ScriptDir & '\exefiles\'
$Path=StringReplace( $Path, "\\", "\")
|
Цитата:
Цитата 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)
|
Большое спасибо, очень пригодилось!
|
Время: 21:20.
© OSzone.net 2001-