View previous topic :: View next topic |
Author |
Message |
n17
Joined: 08 Jun 2013 Posts: 1
|
(Separately) Posted: Sat Jun 08, 2013 00:57 Post subject: Как автоматически раскидать файлы? |
|
|
Всем привет!
Есть библиотека для электронной книжки, книги в которой раскиданы по папкам. То есть сначала идёт папка с первой буквой фамилии автора, в ней лежат папки с фамилиями, а уже в них сами книги. Книжка не предоставляет возможность быстрого перехода, так что из-за объёма библиотеки (например на букву "А" может быть несколько тысяч авторов) нужно создать дополнительные папки, куда и поместить авторов (например "Авдеев-Алексеев"). Это нужно для того, чтобы не нажимать клавишу "вниз" тысячу раз, добираясь до автора из середины списка. Таким образом, я хочу, чтобы в папке буквы (А) появились папки, в которые бы переместились папки авторов (Авдеев, Адамс, Азаров и т.д. вплоть до Алексеева) скажем штук по 20 авторов в одной папке и называться эти новые папки должны по имени первого и последнего автора, которые находятся внутри (Авдеев-Алексеев). Можно ли как-то автоматизировать этот процесс?
Спасибо.
P.S. Претензии к книжке не принимаются  |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jun 08, 2013 02:04 Post subject: |
|
|
n17
Т.е. из такой структурыбиблиотека > А > Авдеев
библиотека > А > Алексеев
библиотека > Б > Басов
библиотека > Б > Беликов
библиотека > Б > Бобриков
библиотека > Б > Бродский надо получить такую?:библиотека > Авдеев-Алексеев > Авдеев
библиотека > Авдеев-Алексеев > Алексеев
библиотека > Басов-Беликов > Басов
библиотека > Басов-Беликов > Беликов
библиотека > Бобриков-Бродский > Бобриков
библиотека > Бобриков-Бродский > Бродский
Только деление на 20 я бы не рекомендовал. Лучше разбивать по первым двум буквам алфавитной последовательности. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Olaf

Joined: 23 Mar 2006 Posts: 11
|
(Separately) Posted: Sun Jun 09, 2013 22:31 Post subject: |
|
|
у меня как раз такая ситуация и да, так именно и нужно. как это сделать? |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Jun 09, 2013 23:21 Post subject: |
|
|
Olaf
А почему бы не брать первые 2 буквы? Т.е. АБ-АИ / АК-АУ / АФ-АЯ.
Зачем именно фамилии? _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Olaf

Joined: 23 Mar 2006 Posts: 11
|
(Separately) Posted: Mon Jun 10, 2013 21:42 Post subject: |
|
|
по первым двум буквам получается слишком много фамилий |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon Jun 10, 2013 22:19 Post subject: |
|
|
Интервалы можно сократить. Либо оставить без интервалов, т.е. кидать в папки с двумя первыми буквами. _________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
Olaf

Joined: 23 Mar 2006 Posts: 11
|
(Separately) Posted: Wed Jun 19, 2013 17:45 Post subject: |
|
|
всё равно получается много. но это хоть какой-то вариант. только я всё ещё не знаю, как это сделать? |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat Jun 22, 2013 17:51 Post subject: |
|
|
Olaf wrote: | всё равно получается много. | Может, и много, но никак не больше, чем в первом варианте. Т.е.
АВ > Авдеев
АЛ > Алексеев по логике лучше, чем
Авдеев-Алексеев > Авдеев
Авдеев-Алексеев > Алексеев Для исходных тестируем vbs (сперва на болванках, писал без тестов):
Code: | '===============================================================================
' Перемещение в активной папке подкаталогов из однобуквенных (в кириллице)
' каталогов в новые подкаталоги (<первое имя в цикле>-<последнее имя в цикле>)
' исходя из разбиения по делящему числу
' Условие: путь запуска - пустой
' Параметр: <делящее число>
'===============================================================================
Count = WScript.Arguments(0)
CD = CreateObject("WScript.Shell").CurrentDirectory & "\"
Set FSO = CreateObject("Scripting.FileSystemObject")
For Each i in Split("а б в г д е ё ж з и к л м н о п р с т у ф х ц ч ш щ э ю я")
FPath = CD & i
If FSO.FolderExists(FPath) Then
S = "" : Set SubF = FSO.GetFolder(FPath).SubFolders
Max = SubF.Count
For Each Fd In Subf
S = S & "|" & FSO.GetFileName(Fd)
Next : Mass = Split(Mid(S,2), "|")
If Max <= Count And Max > 1 Then
FSO.GetFolder(FPath).Name = Mass(0) & "-" & Mass(Max - 1)
Else
For n = 1 To Max
If n < Count - 1 Then
Pref = Mass(0) : NewPath = CD & Pref & "-" & Mass(19) & "\"
ElseIf Fix(n/Count + 1) = n/Count + 1 Then
If n + Count <= Max Then Last = Mass(n + Count - 1) Else Last = Mass(Max - 1)
Pref = Mass(n - 1) : NewPath = CD & Pref & "-" & Last & "\"
End If
If Not FSO.FolderExists(NewPath) Then FSO.CreateFolder(NewPath)
FSO.MoveFolder FPath & "\" & Mass(n - 1), NewPath
Next
End If
End If
Next : Set FSO = Nothing : Set SubF = Nothing : WScript.Quit |
_________________ Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой. |
|
Back to top |
|
 |
|