Что нового

[Файловая система] Объединение содержимого файлов, находящихся в 1 каталоге но в разных папках

Foley

Новичок
Сообщения
2
Репутация
0
стурктура:

каталог X содержит:
папка 01 в которой лежит: файл 1.тхт
папка 02 в которой лежит: файл 2.тхт
папка 03 в которой лежит: файл 3.тхт

нужно чтобы содержимое файл 1.тхт,файл 2.тхт,файл 3.тхт объединилось в ОБЩИЙ.txt

возможно ли это так же через окно выбора папки (FileSelectFolder)

или что бы объединить файлы из разных папок нужно использовать массив?

есть скрипт который объединяет содержимое всех тхт файлов только из одной папки в один ОБЩИЙ.тхт:

Код:
;выбор файла
$sPath = FileSelectFolder ("Укажите путь к папке с файлами:", "",2)
	$search = FileFindFirstFile($sPath & '\*.txt')
	$sContent = ''
While 1
    $sFile = FileFindNextFile($search)
    If @error Then ExitLoop
    $sContent &= FileRead($sPath & '\' & $sFile)
WEnd
FileWrite($sPath & '\' & 'ОБЩИЙ.txt', $sContent)
 

kaster

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


С уважением, ваш Глобальный модератор.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
Код:
$folder_file = FileSelectFolder('','')
$aReturn = _FileSearch($folder_file , "*.txt",1,1)
For $i =0 To UBound($aReturn)-1
$text = FileRead($aReturn[$i])
FileWrite('C:\общий.txt',$text & @CRLF)
	Next

; #FUNCTION# ====================================================================================================
; Author.........:  G.Sandler (MrCreatoR).
; ===============================================================================================================
Func _FileSearch($sPath, $sFileMask = "*", $iFlag = 0, $iSubDir = 1, $iSort = 0)
    Local $sOutBin, $sOut, $aOut, $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
    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
 
Автор
F

Foley

Новичок
Сообщения
2
Репутация
0
где-то уже это видел)
спасибо огрромное! сделал, работает :stars:
 
Верх