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: Перемещение/копирование 250 файлов из каждой подпапки 
Author Message
Flasher



PostPosted: Mon Mar 06, 2017 18:31    Post subject: Reply with quote

BeardFury78
Code:
'==================================================================================
' Копирование/перемещение заданного числа изменённых последними файлов из
' подкаталога структуры выбранных папок с сохранением относительных путей

' Условие: путь запуска - пустой

' Параметры: %WL "<путь получателя>" <число файлов> <copy/move> <флаг рекурсии: 1>
' Примеры:   %WL "%T" 250 copy 1  |  %WL "C:\Мой каталог" 10 move
'==================================================================================

With WSH.Arguments
  C = .Count : If C = 0 Then WSH.Quit
  If C < 4 Then MsgBox "Укажите 4 или 5 параметров!", 4144 : WSH.Quit
  List = .Item(0) : Path = .Item(1) : Cnt = .Item(2) : Act = .Item(3)
  If C = 5 Then Rec = .Item(4)
End With : If LCase(Act) = "copy" Then Par = ", True"

Set Targ = CreateObject("Shell.Application").NameSpace(Path)
Set Sort = CreateObject("System.Collections.Sortedlist")
Set FSO  = CreateObject("Scripting.FileSystemObject")
IPath = FSO.GetAbsolutePathName("")
If FSO.BuildPath(IPath, "\") = FSO.BuildPath(Path, "\") Then WSH.Quit
Ln = Len(IPath) + 2 : Set List = FSO.OpenTextFile(List,,,-1)
Do : Fold = List.ReadLine
  If FSO.FolderExists(Fold) Then ForFolder Fold
Loop Until List.AtEndOfStream : List.Close
If lCase(Act) = "copy" Then Act = " Копирование" Else Act = " Перемещение"
MsgBox Space(26) & "Выполнено!", 4160, Act & " изменённых последними файлов      "

Sub ForFolder(Fd)
  Set IFold = FSO.GetFolder(Fd)
  For Each F In IFold.Files
    Sort.Add DateDiff("s", 0, F.DateLastModified) & F.Name, F.Name
  Next : DLimit = Sort.Count
  If DLimit Then
    RPath = FSO.BuildPath(FSO.BuildPath(Path, Mid(Fd, Ln)), "\")
    If Not FSO.FolderExists(RPath) Then Targ.NewFolder(Mid(IFold.Path, Ln))
    ULimit = DLimit - Cnt : If ULimit < 0 Then ULimit = 0
    For i = DLimit - 1 To ULimit Step -1
      Set File = FSO.GetFile(FSO.BuildPath(Fd, Sort.GetByIndex(i)))
      If Not (FSO.FileExists(RPath & File.Name) And _
      (File.Attributes And 1) = 1) Then Execute "File." & Act & " RPath" & Par
    Next : Sort.Clear
  End If : If Rec = 1 Then For Each F in IFold.SubFolders : ForFolder F : Next
End Sub

BeardFury78 wrote:
Если нужно, могу пояснить для чего это мне нужно.
Желательно.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group