Перемещение групп файлов согласно числовому диапазону
Select messages from
# through # FAQ
[/[Print]\]
Goto page Previous  1, 2, 3, 4, 5  Next  :| |:
Total Commander -> Автоматизация Total Commander

#46:  Author: FlasherLocation: Москва PostPosted: Fri Nov 06, 2015 22:22
    —
Hjkma
Правка неверная. А вот за наводку спасибо. Забыл учесть символ "-" во втором вызове процедуры. См. исправленный вариант.

#47:  Author: Hjkma PostPosted: Fri Nov 06, 2015 22:28
    —
Flasher
Спасибо большое, все заработало. А правку 0 я поставил чтобы и перемещались файлы в сериях, первая нумерация которых начинается на 0. В общем, скрипт работает. Очень вам благодарен!

#48:  Author: FlasherLocation: Москва PostPosted: Fri Nov 06, 2015 22:33
    —
Hjkma
Пожалуйста. Но правка на ноль никакого отношения к нумерации вообще не имеет. Я же писал над скриптом, что пойду от количества, а не номеров. И если бы единица была лишней, то запись "- 0" там была вообще не нужна, ибо это арифметическое выражение. Wink

#49:  Author: Tol!kLocation: Арзамас PostPosted: Fri Nov 06, 2015 22:35
    —
Flasher wrote:
' Примеры: %WL "%T" 1 | %WL D:\MyFolder
не экономь, запиши в две строки.
труба - это вполне возможный в параметрах символ

#50:  Author: FlasherLocation: Москва PostPosted: Fri Nov 06, 2015 22:36
    —
Tol!k
Ну я же пишу "Примеры:". Вроде понятно. Я ещё двойным или тройным пробелом отделяю, чтобы совсем очевидно было.
И в любом случае нужно исходить из указанного числа параметров. Тут проблема лежала скорее в плоскости общего непонимания устройства параметров.

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

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

Flasher wrote:
И если бы единица была лишней
Хм. А она там действительно лишняя. Убрал. Иначе, если в папке окажутся файлы, отличающиеся лишь _ или - и входящие в один диапазон, то целевая папка будет иметь уже сдвоенный диапазон.

#51:  Author: Hjkma PostPosted: Fri Nov 06, 2015 23:09
    —
Еще один вопрос. А как бы изменять границы диапазонов по собственному желанию? Если я например хочу не 0-10, 11-20, 21-30, а 0-5, 6-12, 13-20? В общем хотелось бы иметь возможность самому задавать диапазоны, задавая соответствующие цифры в скрипте, это очень пригодилось бы в будущем. Это возможно?

#52:  Author: FlasherLocation: Москва PostPosted: Sat Nov 07, 2015 02:14
    —
Статичных безинтервальных диапазонов может быть сколько угодно, верхний лимит ограничит потенциал для создания новых диапазонов. Поэтому интервальное решение куда практичнее и лаконичнее.

#53:  Author: Hjkma PostPosted: Sat Nov 07, 2015 02:23
    —
Flasher wrote:
Статичных безинтервальных диапазонов может быть сколько угодно, верхний лимит ограничит потенциал для создания новых диапазонов. Поэтому интервальное решение куда практичнее и лаконичнее.

Может быть, но дело в том, что у меня серии файлов обычно идут по 10-20 и по 20-30, большое количество файлов в сериях это уже для меня редкость. Поэтому можно например иметь два скрипты для разных случаев: один с вручну настраиваемыми диапазонами для работы над файлами в папке, серии которых ограничиваются файлами не больше количества 30 штук. Или скрипт может ограничиться сериями с количеством файлов до 30 штук. А дальше после перемещения файлов, дальше работает второй скрипт как обычно, для серий у которых файлы могут идти в количестве в групах больше 30 штук и поэтому скрипт генерирует автоматически новые диапазоны.

#54:  Author: FlasherLocation: Москва PostPosted: Sat Nov 07, 2015 02:37
    —
А в чём преимущество у 6-12, 13-20 перед 5-10 и 11-20, скажем?
Просто я хочу реальную пользу в этом увидеть. С общим делителем всегда легче результата добиться.

Оверквотить, повторяюсь, не следует.

#55:  Author: Hjkma PostPosted: Sat Nov 07, 2015 02:53
    —
Flasher
Например если общий размер файлов зажимает, а есть например старые фотосеты, которые жалко удалить, но можно сократить их количество в разы, так чтобы их осталось 4-5 штук от каждого фотосета. Просто убрав каждые вторые или третьи фотографии, в зависимости от количества файлов. Но такое можно проделать с фотосетами с файлами +10 штук, а вот такое проделать с фотосетами с кол-ством файлов до 10 штук - это значить что возможно есть ситуация когда останется от этой операции 2-3 штук, а хотелось бы сделать так чтобы я мог задавать вручную диапазоны так, чтобы пошагово уполовинывая или утретьивая количество фотографий, в результате осталось 4-5 штук. То есть, если например, оставляя диапазон лишь от 9 до 11, я могу легко сократить количество файлов до 4-5 штук в каждой серии и это бы здорово сэкономило размер. При этом это делается так, чтобы сохранить и начало, середину и конец сюжета фотосета, то есть мне не нужно сохранить первые 4-5 штук фотосета, а все остальное удалить. А это можно добиться если удалять файлы через каждый второй или третий файл, зеброй выделяя файлы и удаляя их.

#56:  Author: FlasherLocation: Москва PostPosted: Sat Nov 07, 2015 03:24
    —
Hjkma
Не понял про удаление, если речь о перемещении. Зерба-то выделяет всё подряд, не по группам. Для разбивки интервалы можно сделать с разрывами. Это не устроит?

#57:  Author: Hjkma PostPosted: Sat Nov 07, 2015 03:40
    —
Flasher
Ну например, я перемещаю все серии, с кол-ством файлами от 9 до 11 в одну папку. Таким образом в папке, собираются все серии с более менее одинаковым количеством файлов в сериях, затем я посторонней программой выделяю зеброй каждые вторые файлы, удаляю их, таким образом получаются все серии, в количеством файлов в группе не более 4-5 штук. Или например мне нужно сделать так чтобы сократить кол-ство файлов в сериях по 20 штук до 4-5. Для этого я собираю их в диапазон от 19 до 21, затем сокращаю их количество в два разы, а потом провожу еще одну операцию сокращения и таким образом получаются серии по 4-5. При этом такое удаление зеброй удобно тем, что сохраняет примерно весь сюжет фотосетов, при это сокращает число файлов в разы. Вот для этого мне было бы удобно, чтобы иметь возможность самому задавать диапазон.

А эту тему первоначально создал просто чтобы можно было бы рассортировать все фотосеты по их количествам и потом удалить самые тяжелые.

#58:  Author: FlasherLocation: Москва PostPosted: Sat Nov 07, 2015 04:04
    —
Hjkma
Ясно. Позже тогда посмотрю. Устал.

#59:  Author: Hjkma PostPosted: Sat Nov 07, 2015 04:05
    —
Flasher
Хорошо, спасибо вам, буду ждать.

#60:  Author: FlasherLocation: Москва PostPosted: Sun Nov 08, 2015 00:15
    —
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


Last edited by Flasher on Sun Nov 08, 2015 04:52; edited 1 time in total



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page Previous  1, 2, 3, 4, 5  Next  :| |:
Page 4 of 5

Powered by phpBB © 2001, 2005 phpBB Group