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 

Перемещение/копирование 250 файлов из каждой подпапки
Goto page Previous  1, 2, 3, 4  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jun 21, 2017 19:23    Post subject: Reply with quote

BeardFury78
Добрый человек ошибается. Я потом выложу давно готовый вариант с выбором направления. Пока интернет на десктопе отвалился на некоторое время.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
BeardFury78



Joined: 25 Aug 2016
Posts: 213

Post (Separately) Posted: Wed Jun 21, 2017 22:11    Post subject: Reply with quote

Quote:
Добрый человек ошибается.

Ну у меня после этого стали перемещаться файлы с старейшими датами модификации. Но конечно я буду ждать ваш вариант скрипта.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 22, 2017 13:26    Post subject: Reply with quote

BeardFury78
Есть ситуации, где результат будет неверным. Да и сам способ индусский.
Вот дополненный вариант (+ работа с файлами только на чтение):
Code:
'====================================== VBS =======================================
' Копирование/перемещение заданного числа изменённых первыми (по умолч.)/последними
' файлов из подкаталога структуры выбранных папок с сохранением относительных путей

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

' Параметры: %WL "<путь получателя>" <число файлов> <copy/move>
' Дополнительные: <флаг последних правок: 1> <флаг рекурсии: 1>

' Примеры:   %WL "%T" 250 copy 0 1   |   %WL "C:\Мой каталог" 10 move
'==================================================================================

With WSH.Arguments
  C = .Count : If C = 0 Then WSH.Quit
  If C < 4 Then MsgBox "Укажите 4, 5, 6 параметров!", 4144 : WSH.Quit
  List = .Item(0) : Path = .Item(1) : Cnt = .Item(2) : Act = .Item(3)
  If C > 4 Then Last = .Item(4) : If C = 6 Then Rec = .Item(5)
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.BuildPath(FSO.GetAbsolutePathName(""), "\")
If IPath = FSO.BuildPath(Path, "\") Then WSH.Quit
Ln = Len(IPath) + 1 : Set List = FSO.OpenTextFile(List,,,-1)
Do : Fold = List.ReadLine
  If FSO.FolderExists(Fold) Then ForFolder Fold
Loop Until List.AtEndOfStream : List.Close
If Last = 1 Then FOL = "последними" Else FOL = "первыми"
If LCase(Act) = "copy" Then Act = " Копирование" Else Act = " Перемещение"
MsgBox Space(26) & "Выполнено!", 4160, Act & " изменённых " & FOL & " файлов      "

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 : DL = Sort.Count
  If DL Then
    RPath = FSO.BuildPath(FSO.BuildPath(Path, Mid(Fd, Ln)), "\")
    If Not FSO.FolderExists(RPath) Then Targ.NewFolder(Mid(IFold.Path, Ln))
    If Last = 1 Then UL = DL - Cnt : St = -1 Else St = 1 :_
    If CLng(Cnt) > DL Then UL = DL - 1 Else UL = Cnt - 1 End If : Dl = 1
    If UL < 0 Then UL = 0
    For i = DL - 1 To UL Step St
      Set File = FSO.GetFile(FSO.BuildPath(Fd, Sort.GetByIndex(i)))
      A = File.Attributes : R = 0
      If (A And 1) = 1 Then File.Attributes = A - 1 : R = 1
      Execute "File." & Act & " RPath" & Par : If R Then _
      FSO.GetFile(RPath & File.Name).Attributes = A :_
      If LCase(Act) = "copy" Then File.Attributes = A
    Next : Sort.Clear
  End If : If Rec = 1 Then For Each F in IFold.SubFolders : ForFolder F : Next
End Sub

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



Joined: 25 Aug 2016
Posts: 213

Post (Separately) Posted: Thu Jun 22, 2017 19:01    Post subject: Reply with quote

Flasher
Спасибо, поставил. Работает правильно. Правда, что я заметил: если выделять папки в панели результатов поиска, причем они располагаются в разных местах диска, и запустить скрипт, то из них файлы переносятся, но сами папки создаются с сокращенными названиями на конце (начало просто обрезается). А еще может создаваться корневая папка с обрезанным названием, внутри которых расположены другие папки, в которых по одному лежат нужные папки с полным названиям с правильным количеством файлов. Это тоже самое делается и с старым вариантом скрипта. В обычном режиме все пореносится верно и без ошибок.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jun 22, 2017 19:11    Post subject: Reply with quote

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



Joined: 25 Aug 2016
Posts: 213

Post (Separately) Posted: Thu Jun 22, 2017 19:30    Post subject: Reply with quote

Flasher
Тогда ладно. Спасибо за скрипт!
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Fri Jun 23, 2017 15:39    Post subject: Reply with quote

Flasher wrote:
Есть ситуации, где результат будет неверным.

Какие ситуации имеются в виду?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Fri Jun 23, 2017 23:23    Post subject: Reply with quote

А вот и "Добрый человек" объявился. Кто б сомневался (почерк не даст соврать). Very Happy
Ситуаций хватает.
 Например:

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Jun 25, 2017 22:15    Post subject: Reply with quote

Flasher wrote:
Ситуаций хватает.

Сначала идут два файла от 22.12, затем два от 23.12 и в конце четыре от 24.12. Где ошибка?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Jun 25, 2017 22:18    Post subject: Reply with quote

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



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Jun 25, 2017 22:28    Post subject: Reply with quote

Где было какое-то требование сортировки по именам?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Jun 25, 2017 22:35    Post subject: Reply with quote

Это естественная сортировка вне зависимости от каких-то условий.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Jun 25, 2017 23:06    Post subject: Reply with quote

И она всегда является обязательной, если конкретно не указан какой-то другой тип сортировки?
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Sun Jun 25, 2017 23:19    Post subject: Reply with quote

По сути - да, если не касаться историй с FAT32 и т. п.
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
sa



Joined: 29 Apr 2009
Posts: 2567

Post (Separately) Posted: Sun Jun 25, 2017 23:52    Post subject: Reply with quote

А как правильно надо задавать направление (по возрастанию или убыванию) в сортировке по именам (ведь в варианте с 2958465 она по сути тоже есть, только обратная)? Обратная получается, кстати, и для исходной задачи (посмотреть результат можно в тестовом примере, заменив везде 2958465 на 0).
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Goto page Previous  1, 2, 3, 4  Next
Page 2 of 4

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group