текстовый файл с именами всех файлов в папке

Аватара пользователя
socap

текстовый файл с именами всех файлов в папке

Сообщение socap »

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



То есть папок например может быть указано и три и семь.
Аватара пользователя
apozlevich

Re: текстовый файл с именами всех файлов в папке

Сообщение apozlevich »

Цитата socap:



все файлы указанных папок
текстовый файл с именами всех файлов в папке




Указанных где? Все файлы с учетом подпапок или только самих папок? В текстовый файл писать только имена файлов или полные пути?
Аватара пользователя
socap

Re: текстовый файл с именами всех файлов в папке

Сообщение socap »

madmasles, указанных в самом скрипте.



Если можно, то пример с учетом подпапок и без учета.

То есть я например указываю $Dir1 с учетом, $Dir2 без учета.



Круто было бы если полный путь!
Аватара пользователя
madmasles

Re: текстовый файл с именами всех файлов в папке

Сообщение madmasles »

socap,

Код: Выделить всё

$Dir = @ScriptDir & '\AutoIt'
$aFilesAll = _FileSearch($Dir, '*', 1);с учетом подпапок
If @error Then
    MsgBox(16, 'Error', '_FileSearch')
    Exit
EndIf
$sText = 'С учетом подпапок' & @CRLF & 'Папка: ' & $Dir & @CRLF & 'Всего файлов: ' & $aFilesAll[0] & _
        @CRLF & 'На ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & ':' & @MIN & @CRLF
For $i = 1 To $aFilesAll[0]
    $sText &= $i & '. ' & $aFilesAll[$i] & @CRLF
Next
$hFile = FileOpen(@ScriptDir & '\FilesAll.txt', 2)
FileWrite($hFile, StringTrimRight($sText, 2))
FileClose($hFile)
$aFiles = _FileSearch($Dir, '*', 1, 0);без учета подпапок
If @error Then
    MsgBox(16, 'Error', '_FileSearch')
    Exit
EndIf
$sText = 'Без учета подпапок' & @CRLF & 'Папка: ' & $Dir & @CRLF & 'Всего файлов: ' & $aFiles[0] & _
        @CRLF & 'На ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & ':' & @MIN & @CRLF
For $i = 1 To $aFiles[0]
    $sText &= $i & '. ' & $Dir & '\' & $aFiles[$i] & @CRLF
Next
$hFile = FileOpen(@ScriptDir & '\Files.txt', 2)
FileWrite($hFile, StringTrimRight($sText, 2))
FileClose($hFile)
Func _FileSearch($sPath, $sFileMask = "*", $iFlag = 0, $iSubDir = 1, $iSort = 0)
    ;CreatoR; http://autoit-script.ru/index.php.htm/topic,8266.msg55775
    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 1
        $sRead = StdoutRead($hDir, False, True)
        If @error Then
            ExitLoop
        EndIf
        If $sRead <> "" Then
            $sOut &= $sRead
        EndIf
        Sleep(10)
    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   ;==>_FileSearch
Аватара пользователя
madmasles

Re: текстовый файл с именами всех файлов в папке

Сообщение madmasles »

Цитата socap:



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

То есть папок например может быть указано и три и семь.
текстовый файл с именами всех файлов в папке




Фигассе вы заморочились. Есть же команда dir, которая с аргументом /B выводит только имена. Кстати, madmasles именно ее в итоге и использует в коде.
Аватара пользователя
apozlevich

Re: текстовый файл с именами всех файлов в папке

Сообщение apozlevich »

Спасибо! А как сделать так чтобы можно было ввести в скрипт например имя нескольких папок и все они были в этом текстовом файле?
Аватара пользователя
socap

Re: текстовый файл с именами всех файлов в папке

Сообщение socap »

Спасибо! А как сделать так чтобы можно было ввести в скрипт например имя нескольких папок и все они были в этом текстовом файле?
Аватара пользователя
socap

Re: текстовый файл с именами всех файлов в папке

Сообщение socap »

Вот так еще можно



Код:

Код: Выделить всё

#include <File.au3>
#include <RecFileListToArray.au3>
Global $Dir[20]
$Dir[0] = "c:\Program Files\AutoIt3"
$Dir[1] = "c:\Windows"
$Dir[2] = "c:\Temp"
For $i = 0 To UBound($Dir) - 1
    If $Dir[$i] = "" Then ContinueLoop
    _Search($Dir[$i], 0)
    _Search($Dir[$i], 1)
Next
Func _Search($Dir, $iRecursion)
    $aFiles = _RecFileListToArray($Dir, "*.*", 1, $iRecursion, 0, 2, "", "")
    If Not IsArray($aFiles) Then
        MsgBox(16, "Error", "Invalid input path"& @CRLF & $Dir)
        Return
    Else
        If $iRecursion = 0 Then
            $hFile = FileOpen(@ScriptDir & "\NoRecursion.txt",1)
        Else
            $hFile = FileOpen(@ScriptDir & "\Recursion.txt",1)
        EndIf
        _FileWriteFromArray($hFile, $aFiles, 1)
        FileClose($hFile)
    EndIf
EndFunc

Udf брать
здесь
и положить в Autoit3\Include
Аватара пользователя
AZJIO

Re: текстовый файл с именами всех файлов в папке

Сообщение AZJIO »

socap, до кучи


читать дальше »




Код:

Код: Выделить всё

#Include 
$FileList=_FO_FileSearch(@WindowsDir, '*', True, 125, 1, 0)&@CRLF
$FileList &=_FO_FileSearch(@UserProfileDir, '*', True, 125, 1, 0)&@CRLF
$FileList &=_FO_FileSearch(@ProgramFilesDir&'\Internet Explorer', '*', True, 125, 1, 0)
$file = FileOpen(@ScriptDir&'\file.txt',2)
FileWrite($file, $FileList)
FileClose($file)







Только надо скачать
это
и положить файл FileOperations.au3 в папку "C:\Program Files\AutoIt3\Include"
Аватара пользователя
apozlevich

Re: текстовый файл с именами всех файлов в папке

Сообщение apozlevich »

Так чем вам не нравится использование dir /B?
Ответить

Вернуться в «AutoIt»