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 

Перемещение групп файлов согласно числовому диапазону
Goto page Previous  1, 2, 3, 4, 5  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: 12864
Location: Москва

Post (Separately) Posted: Fri Nov 06, 2015 22:22    Post subject: Reply with quote

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



Joined: 18 Apr 2015
Posts: 167

Post (Separately) Posted: Fri Nov 06, 2015 22:28    Post subject: Reply with quote

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



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

Post (Separately) Posted: Fri Nov 06, 2015 22:33    Post subject: Reply with quote

Hjkma
Пожалуйста. Но правка на ноль никакого отношения к нумерации вообще не имеет. Я же писал над скриптом, что пойду от количества, а не номеров. И если бы единица была лишней, то запись "- 0" там была вообще не нужна, ибо это арифметическое выражение. Wink
_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1725
Location: Арзамас

Post (Separately) Posted: Fri Nov 06, 2015 22:35    Post subject: Reply with quote

Flasher wrote:
' Примеры: %WL "%T" 1 | %WL D:\MyFolder
не экономь, запиши в две строки.
труба - это вполне возможный в параметрах символ
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri Nov 06, 2015 22:36    Post subject: Reply with quote

Tol!k
Ну я же пишу "Примеры:". Вроде понятно. Я ещё двойным или тройным пробелом отделяю, чтобы совсем очевидно было.
И в любом случае нужно исходить из указанного числа параметров. Тут проблема лежала скорее в плоскости общего непонимания устройства параметров.

P.S.: Пиши с заглавных, ставь точки в конце.

Добавлено спустя 22 минуты:

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



Joined: 18 Apr 2015
Posts: 167

Post (Separately) Posted: Fri Nov 06, 2015 23:09    Post subject: Reply with quote

Еще один вопрос. А как бы изменять границы диапазонов по собственному желанию? Если я например хочу не 0-10, 11-20, 21-30, а 0-5, 6-12, 13-20? В общем хотелось бы иметь возможность самому задавать диапазоны, задавая соответствующие цифры в скрипте, это очень пригодилось бы в будущем. Это возможно?
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Nov 07, 2015 02:14    Post subject: Reply with quote

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



Joined: 18 Apr 2015
Posts: 167

Post (Separately) Posted: Sat Nov 07, 2015 02:23    Post subject: Reply with quote

Flasher wrote:
Статичных безинтервальных диапазонов может быть сколько угодно, верхний лимит ограничит потенциал для создания новых диапазонов. Поэтому интервальное решение куда практичнее и лаконичнее.

Может быть, но дело в том, что у меня серии файлов обычно идут по 10-20 и по 20-30, большое количество файлов в сериях это уже для меня редкость. Поэтому можно например иметь два скрипты для разных случаев: один с вручну настраиваемыми диапазонами для работы над файлами в папке, серии которых ограничиваются файлами не больше количества 30 штук. Или скрипт может ограничиться сериями с количеством файлов до 30 штук. А дальше после перемещения файлов, дальше работает второй скрипт как обычно, для серий у которых файлы могут идти в количестве в групах больше 30 штук и поэтому скрипт генерирует автоматически новые диапазоны.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Nov 07, 2015 02:37    Post subject: Reply with quote

А в чём преимущество у 6-12, 13-20 перед 5-10 и 11-20, скажем?
Просто я хочу реальную пользу в этом увидеть. С общим делителем всегда легче результата добиться.

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



Joined: 18 Apr 2015
Posts: 167

Post (Separately) Posted: Sat Nov 07, 2015 02:53    Post subject: Reply with quote

Flasher
Например если общий размер файлов зажимает, а есть например старые фотосеты, которые жалко удалить, но можно сократить их количество в разы, так чтобы их осталось 4-5 штук от каждого фотосета. Просто убрав каждые вторые или третьи фотографии, в зависимости от количества файлов. Но такое можно проделать с фотосетами с файлами +10 штук, а вот такое проделать с фотосетами с кол-ством файлов до 10 штук - это значить что возможно есть ситуация когда останется от этой операции 2-3 штук, а хотелось бы сделать так чтобы я мог задавать вручную диапазоны так, чтобы пошагово уполовинывая или утретьивая количество фотографий, в результате осталось 4-5 штук. То есть, если например, оставляя диапазон лишь от 9 до 11, я могу легко сократить количество файлов до 4-5 штук в каждой серии и это бы здорово сэкономило размер. При этом это делается так, чтобы сохранить и начало, середину и конец сюжета фотосета, то есть мне не нужно сохранить первые 4-5 штук фотосета, а все остальное удалить. А это можно добиться если удалять файлы через каждый второй или третий файл, зеброй выделяя файлы и удаляя их.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Nov 07, 2015 03:24    Post subject: Reply with quote

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



Joined: 18 Apr 2015
Posts: 167

Post (Separately) Posted: Sat Nov 07, 2015 03:40    Post subject: Reply with quote

Flasher
Ну например, я перемещаю все серии, с кол-ством файлами от 9 до 11 в одну папку. Таким образом в папке, собираются все серии с более менее одинаковым количеством файлов в сериях, затем я посторонней программой выделяю зеброй каждые вторые файлы, удаляю их, таким образом получаются все серии, в количеством файлов в группе не более 4-5 штук. Или например мне нужно сделать так чтобы сократить кол-ство файлов в сериях по 20 штук до 4-5. Для этого я собираю их в диапазон от 19 до 21, затем сокращаю их количество в два разы, а потом провожу еще одну операцию сокращения и таким образом получаются серии по 4-5. При этом такое удаление зеброй удобно тем, что сохраняет примерно весь сюжет фотосетов, при это сокращает число файлов в разы. Вот для этого мне было бы удобно, чтобы иметь возможность самому задавать диапазон.

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



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

Post (Separately) Posted: Sat Nov 07, 2015 04:04    Post subject: Reply with quote

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



Joined: 18 Apr 2015
Posts: 167

Post (Separately) Posted: Sat Nov 07, 2015 04:05    Post subject: Reply with quote

Flasher
Хорошо, спасибо вам, буду ждать.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sun Nov 08, 2015 00:15    Post subject: Reply with quote

Hjkma
Слил возможности в один скрипт. Можно протестировать.
Code:
'=============================== VBS ===============================
' Рассортировка групп одноимённых до знака "-" или "_" файлов
' из выбранных папок в каталоги, соответствующие числовому диапазону
'
' Параметры: %WL "<путь к целевой папке>"
' Дополнительные параметры:  <не/удалять пустые папки: 0/1>
'                            <числовые диапазоны:  MIN-MAX>
' Числовые диапазоны должны быть несмежными и разделяться пробелами.
' Если диапазоны не указаны или группа файлов не вписывается
' и в последний диапазон, то перенос производится в каталоги
' с диапазонами +10 (1-10, 11-20 и т. д.).

' Примеры:   %WL "%T" 1   |   %WL D:\MyFolder 0 1-5 8-15 19-25
'===================================================================

Option Explicit : Dim Title, List, ODir, Cnt,_
Del, FSO, Dict, ShA, Folder, Filt, Chek, Items

Title = " Перемещение файлов по группам каталогов     "
With WScript.Arguments
  Cnt = .Count : If Cnt = 0 Then WScript.Quit
  If Cnt < 2 Then MsgBox _
  "Укажите не менее 2-х параметров!", 4144, Title : WScript.Quit
  List = .Item(0) : ODir = .Item(1) : If Cnt > 2 Then Del = .Item(2)
  If Cnt > 3 Then Dim P, S, Sp
End With

Set FSO  = CreateObject("Scripting.FileSystemObject")
Set Dict = CreateObject("Scripting.Dictionary")
Set ShA  = CreateObject("Shell.Application")
Set List = FSO.OpenTextFile(List,,,-1)

Do : Folder = List.ReadLine
  If FSO.FolderExists(Folder) Then
    Set Folder = ShA.NameSpace(Folder)
    Set Items  =  Folder.Items
    Items.Filter 8384, "*_*.*" : Move Items, "_", Chek
    Items.Filter 8384, "*-*.*" : Move Items, "-", Chek
    If Del Then
      Items.Filter 8416, "*"
      If Items.Count = 0 Then FSO.GetFolder(Folder.Self.Path).Delete
    End if
  End If
Loop Until List.AtEndOfStream
If Chek = 1 Then MsgBox "Задание успешно выполнено!", 4160, Title _
Else MsgBox "Файлы с заданным условием отсутствуют!", 4144, Title

Sub Move(Itms, Sym, Chk)
  Dim FItems, FN, BN, LN, Ext, F, Nm, Span, OutDir
  Set FItems = Folder.Items
  For Each FN in Itms
    BN = FSO.GetBaseName(FN) : Ext = FSO.GetExtensionName(FN)
    LN = Left(BN, InStrRev(BN, Sym)) : F = LN & ":"  & Ext
    If Not Dict.Exists(F) Then
      Dict.Add F, "" : FItems.Filter 8384, LN & "*." & Ext
      Nm = FItems.Count : Span = ""
      If Cnt > 3 Then
        For P = 3 To Cnt - 1
          S = WScript.Arguments(P) : Sp = Split(S, "-")
          If Nm>=Abs(Sp(0)) And Nm<=Abs(Sp(1)) Then Span=S : Exit For
        Next
      End If
      If Cnt < 4 Or (Cnt > 3 And IsEmpty(Span)) Then
        If Nm/10 = Fix(Nm/10) Then Nm  = Nm - 1
        Span = Int((Nm - 10)/10)*10 + 11 & "-" & Int((Nm + 10)/10)*10
      End If
      If Span <> "" Then
        OutDir = FSO.BuildPath(ODir, "[" & Span & "] файлов в группах")
        If Not FSO.FolderExists(OutDir) Then FSO.CreateFolder(OutDir)
        ShA.NameSpace(OutDir).MoveHere FItems, 280 : Chk = 1
      End If
    End If
  Next : Dict.RemoveAll
End Sub

_________________
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.


Last edited by Flasher on Sun Nov 08, 2015 04:52; edited 1 time in total
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, 5  Next
Page 4 of 5

 
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