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 

Как автоматически раскидать файлы?

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
n17



Joined: 08 Jun 2013
Posts: 1

Post (Separately) Posted: Sat Jun 08, 2013 00:57    Post subject: Как автоматически раскидать файлы? Reply with quote

Всем привет!
Есть библиотека для электронной книжки, книги в которой раскиданы по папкам. То есть сначала идёт папка с первой буквой фамилии автора, в ней лежат папки с фамилиями, а уже в них сами книги. Книжка не предоставляет возможность быстрого перехода, так что из-за объёма библиотеки (например на букву "А" может быть несколько тысяч авторов) нужно создать дополнительные папки, куда и поместить авторов (например "Авдеев-Алексеев"). Это нужно для того, чтобы не нажимать клавишу "вниз" тысячу раз, добираясь до автора из середины списка. Таким образом, я хочу, чтобы в папке буквы (А) появились папки, в которые бы переместились папки авторов (Авдеев, Адамс, Азаров и т.д. вплоть до Алексеева) скажем штук по 20 авторов в одной папке и называться эти новые папки должны по имени первого и последнего автора, которые находятся внутри (Авдеев-Алексеев). Можно ли как-то автоматизировать этот процесс?
Спасибо.
P.S. Претензии к книжке не принимаются Very Happy
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat Jun 08, 2013 02:04    Post subject: Reply with quote

n17
Т.е. из такой структуры
    библиотека > А > Авдеев
    библиотека > А > Алексеев
    библиотека > Б > Басов
    библиотека > Б > Беликов
    библиотека > Б > Бобриков
    библиотека > Б > Бродский
надо получить такую?:
    библиотека > Авдеев-Алексеев > Авдеев
    библиотека > Авдеев-Алексеев > Алексеев
    библиотека > Басов-Беликов > Басов
    библиотека > Басов-Беликов > Беликов
    библиотека > Бобриков-Бродский > Бобриков
    библиотека > Бобриков-Бродский > Бродский

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



Joined: 23 Mar 2006
Posts: 11

Post (Separately) Posted: Sun Jun 09, 2013 22:31    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 09, 2013 23:21    Post subject: Reply with quote

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



Joined: 23 Mar 2006
Posts: 11

Post (Separately) Posted: Mon Jun 10, 2013 21:42    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: Mon Jun 10, 2013 22:19    Post subject: Reply with quote

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



Joined: 23 Mar 2006
Posts: 11

Post (Separately) Posted: Wed Jun 19, 2013 17:45    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: Sat Jun 22, 2013 17:51    Post subject: Reply with quote

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
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
Page 1 of 1

 
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