Что нового

[Решено] Поиск определенного файла и его копирование

BlackReality

Новичок
Сообщения
7
Репутация
0
Версия AutoIt: 3.

Описание:
Вставил флушку запустил скрипт,он запустил поиск на диске С файлов под названием autoit.exe , proga.exe (примерно 8 файлов)и при обнаружении скопировал их на флешку,желательно чтобы по окончанию работы скрипта отобразилось хотябы окно "Всё ок " ,но это не особо важно,главное работоспособность самой функции.
Примечания:
Заранее благодарю.И прошу прошения у CreatoR за создание одинаковой темы.Просто подобрал раздел подходящий
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Re: Поиск определенного файла и его копирование

Попробуй так:
Код:
$Files = _FileDirList(@ProgramFilesDir, "*.exe")

For $i = 1 To $Files[0]
	$FileName = StringRegExpReplace($Files[$i], '(^.*)\\(.*)$', '\2')
	Switch $FileName
		Case 'autoit.exe', 'proga.exe' ; и.т.д ...
			FileCopy($Files[$i], @ScriptDir & '\Files\', 1)
	EndSwitch
Next

MsgBox(0, 'Test', 'Все ок !!!')

Func _FileDirList($sPath, $sFileMask = "*", $iFlag = 0, $iSubDir = 1, $iSort = 0)
    Local $sOutBin, $sOut, $aOut, $aMasks, $sRead, $hDir, $sAttrib, $sFiles

    If Not StringInStr(FileGetAttrib($sPath), "D") Then
        Return SetError(1, 0, 0)
    EndIf

    If $iSubDir = 1 Then
        $sAttrib &= ' /S'
    EndIf

    If $iSort = 1 Then
        $sAttrib &= ' /O:N'
    EndIf

    Switch $iFlag
        Case 1
            $sAttrib &= ' /A-D'
        Case 2
            $sAttrib &= ' /AD'
        Case Else
            $sAttrib &= ' /A'
    EndSwitch

    $sOut = StringToBinary('0' & @CRLF, 2)
    $sPath = StringRegExpReplace($sPath, '\\+$', '')
    $sFileMask = StringRegExpReplace($sFileMask, '^;+|;+$', '')
    $sFileMask = StringRegExpReplace($sFileMask, ';{2,}', ';')
    $aMasks = StringSplit($sFileMask, ';')

    For $i = 1 To $aMasks[0]
        If StringStripWS($aMasks[$i], 8) = "" Then
            ContinueLoop
        EndIf

        $sFiles &= '"' & $sPath & '\' & $aMasks[$i] & '"'

        If $i < $aMasks[0] Then
            $sFiles &= ';'
        EndIf
    Next

    $hDir = Run(@ComSpec & ' /U /C DIR ' & $sFiles & ' /B' & $sAttrib, @SystemDir, @SW_HIDE, 6)

    While ProcessExists($hDir)
        $sRead = StdoutRead($hDir, False, True)

        If @error Then
            ExitLoop
        EndIf

        If $sRead <> "" Then
            $sOut &= $sRead
        EndIf
    Wend

    $aOut = StringRegExp(BinaryToString($sOut, 2), '[^\r\n]+', 3)

    If @error Or UBound($aOut) < 2 Then
        Return SetError(2, 0, 0)
    EndIf

    $aOut[0] = UBound($aOut)-1
    Return $aOut
EndFunc
 
Автор
B

BlackReality

Новичок
Сообщения
7
Репутация
0
Re: Поиск определенного файла и его копирование

O_o очень даже хорошо,огромное спасибо.Подскажи как добавить сразу несколько засширений файлов в первой строке?
Пример
Код:
$Files = _FileDirList(@ProgramFilesDir, "*.exe" [color=red]как тут добавить расширение?[/color])
For $i = 1 To $Files[0]
    $FileName = StringRegExpReplace($Files[$i], '(^.*)\\(.*)$', '\2')
    Switch $FileName
        Case 'proga.exe', 'test.txt' ,'pop.mp3'
 

Police

Новичок
Сообщения
27
Репутация
3
Re: Поиск определенного файла и его копирование

"*.exe|*.txt|*.mp3|*.*"
Вроде так.
______________________
Добавить в первую строчку - получается. Ошибка идёт в получение массива.
 
Автор
B

BlackReality

Новичок
Сообщения
7
Репутация
0
Re: Поиск определенного файла и его копирование

так не получается....
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Re: Поиск определенного файла и его копирование

как добавить сразу несколько засширений файлов в первой строке?
"*.au3;*.txt"

Вот функция:
http://autoit-script.ru/index.php?topic=8266.0
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Re: Поиск определенного файла и его копирование

BlackReality,
Предупреждение За нарушение правил форума (пункт В.11):
Любые отрывки AutoIt кода необходимо заключать в тег [autoit]
autoit.gif
(подробнее), а обычный код соответственно в тег [code]
code.gif
(подробнее). Также большие выдержки текста помещайте под тег [spoiler]
spoiler.gif
(подробнее), там где это поддерживается естественно. Как в случае с названием темы, также короткое и эргономичное сообщение привлекает больше внимания, и шансы на получение конкретного ответа увеличиваются.


С уважением, ваш Модератор.
 
Автор
B

BlackReality

Новичок
Сообщения
7
Репутация
0
Re: Поиск определенного файла и его копирование

задал несколько расширений,но после того как скрипт находит первый файл,он копирует его на флешку ,но дальше действие прекращается.Может из за этой строки кода ?
Код:
FileCopy($Files[$i], @ScriptDir & '\Files\', 1)


Zaramot ,тебе вообще огромное спасибо за помощь
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Re: Поиск определенного файла и его копирование

Код:
$aReturn_file = _FileDirList('C:\Source', '*.exe;*.txt;*.bat', 1, 1)

For $id = 1 To UBound ($aReturn_file) - 1
	FileCopy( $aReturn_file[$id], 'F:\тест' , 1)
Next

все работает
 
Автор
B

BlackReality

Новичок
Сообщения
7
Репутация
0
Re: Поиск определенного файла и его копирование

да это почти генеально ! :smile:
Но теперь пропала функция указа конкретных файлов
Пример:
Код:
Case 'autoit.exe', 'proga.txt' ; и.т.д ...

P.S. Если начальный скрипт искал файлы по расширению
Код:
$Files = _FileDirList(@ProgramFilesDir, "*.exe;*.txt;*.mp3")

а потом из найденных файлов выбирал конкретные
Код:
Case 'autoit.exe', 'proga.txt' ,'html.mp3'

То теперь функция выборки пропала получается.Её оставить можно как то ?


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

Извеняюсь,сразу не понял все функци данного скрипта :-[.Теперь я разобрался и огромное вам спасибо :beer:.Ужасно благодарен. :ok:
 
Верх