Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Объединение файлов попарно, исходя из их размера 
Author Message
Flasher



PostPosted: Thu Jan 12, 2012 09:19    Post subject: Reply with quote

Вот это уже более менее понятно.
Можно не выделять и не сортировать:
Code:
'=====================================================================
' Попарное склеивание убывающих и возрастающих по размеру файлов

' Если выбран только один файл, то участвуют
' все текстовые файлы корня активной панели

' Параметры %L "%P" "<Путь получателя>" <расширение файлов>
' Пример:   %L "%P" "%T" txt

' Автор - Flasher ©
'=====================================================================
With WScript.Arguments
  If .Count = 0 Then WScript.Quit
  List = .Item(0) : Path = .Item(1)
  Targ = .Item(2) : Ext  = .Item(3)
End With
If Right(Targ, 1) <> "\" Then Targ = Targ & "\"

L = vbNewLine
Set FSO = CreateObject("Scripting.FileSystemObject")
Mass = Split(FSO.OpenTextFile(List, 1).ReadAll, L)
Max  = Ubound(Mass)
If Max = 1 Then
  For Each F in FSO.GetFolder(Path).Files
    If StrComp(Ext, FSO.GetExtensionName(F), 1) = 0 Then S = S & F & L
  Next
  Mass = Split(S, L) : Max = Ubound(Mass)
End If
If Max Mod 2 Then
  MsgBox "Необходимо выбрать чётное число файлов!", 48,_
  Space(32) & "Склеивание файлов" : Quit
End If

Set Dict = CreateObject("ADODB.Recordset")
Dict.Fields.Append "Name", 200, 255
Dict.Fields.Append "Size", 3 : Dict.Open
For Each F In Mass
  If F <> "" Then
    If Not FSO.FileExists(F) Then
      MsgBox "Снимите выделение с каталогов!", 48,_
      Space(22) & "Склеивание файлов" : Quit
    End If
    Dict.AddNew : Dict("Name") = F
    Dict("Size") = CLng(FSO.GetFile(F).Size) : Dict.Update
  End If
Next
Dict.Sort = "Size DESC"
Sort = Split(Dict.GetString, vbCr)
For i = 0 to Max/2 - 1
  Str1 = Sort(i) : N1 = Left(Str1, InStrRev(Str1, vbTab) - 1)
  Str2 = Sort(Max-i-1) : N2 = Left(Str2, InStrRev(Str2, vbTab) - 1)
  FSO.OpenTextFile(Targ & FSO.GetFileName(N1), 2, True, -2).Write _
  FSO.OpenTextFile(N1,,,-2).ReadAll & L & "<p></p>" & _
  L & FSO.OpenTextFile(N2,,,-2).ReadAll
Next : Quit

Sub Quit : Set FSO  = Nothing : Set Dict = Nothing : WScript.Quit
End Sub
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group