Перемещение групп файлов согласно числовому диапазону
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
Hjkma
Правка неверная. А вот за наводку спасибо. Забыл учесть символ "-" во втором вызове процедуры. См. исправленный вариант.
Правка неверная. А вот за наводку спасибо. Забыл учесть символ "-" во втором вызове процедуры. См. исправленный вариант.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Hjkma
Пожалуйста. Но правка на ноль никакого отношения к нумерации вообще не имеет. Я же писал над скриптом, что пойду от количества, а не номеров. И если бы единица была лишней, то запись "- 0" там была вообще не нужна, ибо это арифметическое выражение.
Пожалуйста. Но правка на ноль никакого отношения к нумерации вообще не имеет. Я же писал над скриптом, что пойду от количества, а не номеров. И если бы единица была лишней, то запись "- 0" там была вообще не нужна, ибо это арифметическое выражение.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Tol!k
Ну я же пишу "Примеры:". Вроде понятно. Я ещё двойным или тройным пробелом отделяю, чтобы совсем очевидно было.
И в любом случае нужно исходить из указанного числа параметров. Тут проблема лежала скорее в плоскости общего непонимания устройства параметров.
P.S.: Пиши с заглавных, ставь точки в конце.
Добавлено спустя 22 минуты:
Ну я же пишу "Примеры:". Вроде понятно. Я ещё двойным или тройным пробелом отделяю, чтобы совсем очевидно было.
И в любом случае нужно исходить из указанного числа параметров. Тут проблема лежала скорее в плоскости общего непонимания устройства параметров.
P.S.: Пиши с заглавных, ставь точки в конце.
Добавлено спустя 22 минуты:
Хм. А она там действительно лишняя. Убрал. Иначе, если в папке окажутся файлы, отличающиеся лишь _ или - и входящие в один диапазон, то целевая папка будет иметь уже сдвоенный диапазон.Flasher писал(а):И если бы единица была лишней
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Статичных безинтервальных диапазонов может быть сколько угодно, верхний лимит ограничит потенциал для создания новых диапазонов. Поэтому интервальное решение куда практичнее и лаконичнее.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Может быть, но дело в том, что у меня серии файлов обычно идут по 10-20 и по 20-30, большое количество файлов в сериях это уже для меня редкость. Поэтому можно например иметь два скрипты для разных случаев: один с вручну настраиваемыми диапазонами для работы над файлами в папке, серии которых ограничиваются файлами не больше количества 30 штук. Или скрипт может ограничиться сериями с количеством файлов до 30 штук. А дальше после перемещения файлов, дальше работает второй скрипт как обычно, для серий у которых файлы могут идти в количестве в групах больше 30 штук и поэтому скрипт генерирует автоматически новые диапазоны.Flasher писал(а):Статичных безинтервальных диапазонов может быть сколько угодно, верхний лимит ограничит потенциал для создания новых диапазонов. Поэтому интервальное решение куда практичнее и лаконичнее.
А в чём преимущество у 6-12, 13-20 перед 5-10 и 11-20, скажем?
Просто я хочу реальную пользу в этом увидеть. С общим делителем всегда легче результата добиться.
Оверквотить, повторяюсь, не следует.
Просто я хочу реальную пользу в этом увидеть. С общим делителем всегда легче результата добиться.
Оверквотить, повторяюсь, не следует.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Например если общий размер файлов зажимает, а есть например старые фотосеты, которые жалко удалить, но можно сократить их количество в разы, так чтобы их осталось 4-5 штук от каждого фотосета. Просто убрав каждые вторые или третьи фотографии, в зависимости от количества файлов. Но такое можно проделать с фотосетами с файлами +10 штук, а вот такое проделать с фотосетами с кол-ством файлов до 10 штук - это значить что возможно есть ситуация когда останется от этой операции 2-3 штук, а хотелось бы сделать так чтобы я мог задавать вручную диапазоны так, чтобы пошагово уполовинывая или утретьивая количество фотографий, в результате осталось 4-5 штук. То есть, если например, оставляя диапазон лишь от 9 до 11, я могу легко сократить количество файлов до 4-5 штук в каждой серии и это бы здорово сэкономило размер. При этом это делается так, чтобы сохранить и начало, середину и конец сюжета фотосета, то есть мне не нужно сохранить первые 4-5 штук фотосета, а все остальное удалить. А это можно добиться если удалять файлы через каждый второй или третий файл, зеброй выделяя файлы и удаляя их.
Например если общий размер файлов зажимает, а есть например старые фотосеты, которые жалко удалить, но можно сократить их количество в разы, так чтобы их осталось 4-5 штук от каждого фотосета. Просто убрав каждые вторые или третьи фотографии, в зависимости от количества файлов. Но такое можно проделать с фотосетами с файлами +10 штук, а вот такое проделать с фотосетами с кол-ством файлов до 10 штук - это значить что возможно есть ситуация когда останется от этой операции 2-3 штук, а хотелось бы сделать так чтобы я мог задавать вручную диапазоны так, чтобы пошагово уполовинывая или утретьивая количество фотографий, в результате осталось 4-5 штук. То есть, если например, оставляя диапазон лишь от 9 до 11, я могу легко сократить количество файлов до 4-5 штук в каждой серии и это бы здорово сэкономило размер. При этом это делается так, чтобы сохранить и начало, середину и конец сюжета фотосета, то есть мне не нужно сохранить первые 4-5 штук фотосета, а все остальное удалить. А это можно добиться если удалять файлы через каждый второй или третий файл, зеброй выделяя файлы и удаляя их.
Hjkma
Не понял про удаление, если речь о перемещении. Зерба-то выделяет всё подряд, не по группам. Для разбивки интервалы можно сделать с разрывами. Это не устроит?
Не понял про удаление, если речь о перемещении. Зерба-то выделяет всё подряд, не по группам. Для разбивки интервалы можно сделать с разрывами. Это не устроит?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Flasher
Ну например, я перемещаю все серии, с кол-ством файлами от 9 до 11 в одну папку. Таким образом в папке, собираются все серии с более менее одинаковым количеством файлов в сериях, затем я посторонней программой выделяю зеброй каждые вторые файлы, удаляю их, таким образом получаются все серии, в количеством файлов в группе не более 4-5 штук. Или например мне нужно сделать так чтобы сократить кол-ство файлов в сериях по 20 штук до 4-5. Для этого я собираю их в диапазон от 19 до 21, затем сокращаю их количество в два разы, а потом провожу еще одну операцию сокращения и таким образом получаются серии по 4-5. При этом такое удаление зеброй удобно тем, что сохраняет примерно весь сюжет фотосетов, при это сокращает число файлов в разы. Вот для этого мне было бы удобно, чтобы иметь возможность самому задавать диапазон.
А эту тему первоначально создал просто чтобы можно было бы рассортировать все фотосеты по их количествам и потом удалить самые тяжелые.
Ну например, я перемещаю все серии, с кол-ством файлами от 9 до 11 в одну папку. Таким образом в папке, собираются все серии с более менее одинаковым количеством файлов в сериях, затем я посторонней программой выделяю зеброй каждые вторые файлы, удаляю их, таким образом получаются все серии, в количеством файлов в группе не более 4-5 штук. Или например мне нужно сделать так чтобы сократить кол-ство файлов в сериях по 20 штук до 4-5. Для этого я собираю их в диапазон от 19 до 21, затем сокращаю их количество в два разы, а потом провожу еще одну операцию сокращения и таким образом получаются серии по 4-5. При этом такое удаление зеброй удобно тем, что сохраняет примерно весь сюжет фотосетов, при это сокращает число файлов в разы. Вот для этого мне было бы удобно, чтобы иметь возможность самому задавать диапазон.
А эту тему первоначально создал просто чтобы можно было бы рассортировать все фотосеты по их количествам и потом удалить самые тяжелые.
Hjkma
Слил возможности в один скрипт. Можно протестировать.
Слил возможности в один скрипт. Можно протестировать.
Код: Выделить всё
'=============================== 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
Последний раз редактировалось Flasher Вс ноя 08, 2015 03:52, всего редактировалось 1 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.