View previous topic :: View next topic |
Author |
Message |
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sun May 13, 2012 09:09 Post subject: Перенесение файлов в папки по алфавиту |
|
|
Здравствуйте!
Есть постоянно пополняемая папка.
Есть вторая, где подпапки типа "0-9-A-Z" и далее по алфавиту, папки "А", "Б", "В"......."Я".
Так вот, файлы, начинающиеся (первый символ в имени) на цифру или на англ букву кидаются в папку "0-9-A-Z", а все остальные (первый символ кирилица) сортируются по своим "А", "Б", "В"......
А вопрос такой.
В одной панели выделить что хотим переместить (по соответствующим папкам), в другой панели та "Вторая" с подпапками , подпапки чисто буквы алфавита, и раскидать их.
Как-бы сие соорудить?
Вот как мог нарисовал:
http://i37.fastpic.ru/big/2012/0513/fa/bf9fdb8c1e226e26f6a03ccf65189ffa.jpg |
|
Back to top |
|
 |
CaptainFlint

Joined: 14 Dec 2004 Posts: 6193 Location: Москва
|
(Separately) Posted: Sun May 13, 2012 12:11 Post subject: |
|
|
JKT
После появления в Тотале нормальной поддержки перемещения через Инструмент группового переименования это легко делается через него. В качестве маски имени указать c:\target\path\[N1]\[N], а в поиске-замене какую-нибудь регулярку типа \\[0-9a-z]\\ на \\0-9-A-Z\\ (это если в целевом пути нет однобуквенных папок; если есть, выражение придётся усложнить).
Добавлено:
Ошибся; оказывается, полный путь так указывать нельзя… _________________ Почему же, ё-моё, ты нигде не пишешь "ё"?
Last edited by CaptainFlint on Tue May 29, 2012 00:57; edited 1 time in total |
|
Back to top |
|
 |
JKT
Joined: 22 Sep 2009 Posts: 116 Location: Харьков
|
(Separately) Posted: Sun May 13, 2012 13:15 Post subject: |
|
|
CaptainFlint
Гм... Даже не знал, что можно перемещать файлы изменяя пути (имена) в групповом переименовании. Попробую. Спасибо. |
|
Back to top |
|
 |
savigrand
Joined: 24 Jun 2010 Posts: 20
|
(Separately) Posted: Sun May 27, 2012 18:37 Post subject: |
|
|
CaptainFlint wrote: | JKT
После появления в Тотале нормальной поддержки перемещения через Инструмент группового переименования это легко делается через него. В качестве маски имени указать c:\target\path\[N1]\[N], а в поиске-замене какую-нибудь регулярку типа \\[0-9a-z]\\ на \\0-9-A-Z\\ (это если в целевом пути нет однобуквенных папок; если есть, выражение придётся усложнить). |
Не удается так сделать. Когда пишу в качестве маски имени путь с указанием диска (C:\target ...) то сразу же в конечных именах файлов возникает ошибка. Если же писать путь относительно текущего каталога (target\path если мы находимся в каталоге диска С) то нормально все перемещает без проблем. Как быть с указанием полного пути с указанием диска? |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 27, 2012 21:44 Post subject: |
|
|
savigrand
Никак. Это не работает. Плагина, возвращающего путь другой панели я не знаю (и скорее его пока нет). Выражение [T] аля [P] или [G] Гислер не предусмотрел. И задача-то какая? Если просто раскидать по папкам с односимвольными именами, то это уже в трёх темах тут обсуждалось. |
|
Back to top |
|
 |
savigrand
Joined: 24 Jun 2010 Posts: 20
|
(Separately) Posted: Mon May 28, 2012 00:48 Post subject: |
|
|
Flasher wrote: | savigrand
Никак. Это не работает. Плагина, возвращающего путь другой панели я не знаю (и скорее его пока нет). Выражение [T] аля [P] или [G] Гислер не предусмотрел. И задача-то какая? Если просто раскидать по папкам с односимвольными именами, то это уже в трёх темах тут обсуждалось. |
Да плагин мне не нужен, путь я могу и руками вбить.
Что касается задачи - то да, раскидать файлы по каталогам. Все темы, где это обсуждалось с помощью скриптов - видел. Но хотелось бы узнать про реализацию с помощью группового переименования, т.к. этот инструмент более гибок в плане применения регулярных выражения на лету (если с помощью скрипта, то надо править сам скрипт, если условия задачи изменились).
Пока что решение такое: раскидываю файлы в текущем каталоге по папкам, а далее уже эти папки перемещаю куда нужно. К сожалению одним действием не получается. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon May 28, 2012 14:27 Post subject: |
|
|
savigrand wrote: | Да плагин мне не нужен, путь я могу и руками вбить. | По-моему, должно быть понятно, что без плагина работать не будет. Советую проверить подстановку данных.
savigrand wrote: | если с помощью скрипта, то надо править сам скрипт, если условия задачи изменились | Скрипт всегда можно изменить под указание условий в параметрах. Это тоже по логике должно быть понятно. |
|
Back to top |
|
 |
sa
Joined: 29 Apr 2009 Posts: 2692
|
(Separately) Posted: Mon May 28, 2012 16:35 Post subject: |
|
|
savigrand
Если всё же диск один и тот же, то можно попробовать такую маску:
\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\target\path\[N1]\[N] |
|
Back to top |
|
 |
savigrand
Joined: 24 Jun 2010 Posts: 20
|
(Separately) Posted: Wed Jun 06, 2012 23:41 Post subject: |
|
|
sa wrote: | savigrand
Если всё же диск один и тот же, то можно попробовать такую маску:
\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\target\path\[N1]\[N] |
Да, так получается, но к сожалению на одном и том же диске, но уже что-то, спасибо за помощь
Flasher wrote: | По-моему, должно быть понятно, что без плагина работать не будет. Советую проверить подстановку данных. |
Плагин не нужен! Мне нужно указать путь для конечных файлов тот, которыя я хочу!
Flasher wrote: | Скрипт всегда можно изменить под указание условий в параметрах. Это тоже по логике должно быть понятно. |
Это то и понятно, но следуя такой логике - можно и Total Commander под себя написать с нуля.
Чтобы поменять в скрипте, нужно открывать его, разбираться в коде. А в случае с групповым переименованием - меняется только маска для имени файла. Этот способ изящнее и удобнее в использовании. Хотя скрипт предоставляет более мощные инструменты, но для простых задач он не совсем удобен.
Вопрос не в том, как решить задачу, а как усовершенствовать её решение. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jun 07, 2012 11:04 Post subject: |
|
|
savigrand wrote: | Плагин не нужен! Мне нужно указать путь для конечных файлов тот, которыя я хочу! | А зачем, если есть другая панель, где этот путь уже есть? Этот путь не из головы берётся. Ведь так? Каждый раз его копировать, вызывать ИГП, выделять нужную часть и прописывать? Долго и неудобно.
savigrand wrote: | следуя такой логике - можно и Total Commander под себя написать с нуля. | По сопоставимости временных рамок? Глупость глупейшая.
savigrand wrote: | Чтобы поменять в скрипте, нужно открывать его, разбираться в коде. | Да, открыть это ооочень долго...
Разбираться в коде, как показывает нынешняя практика, можно не обязательно вопрошаещему.
savigrand wrote: | А в случае с групповым переименованием - меняется только маска для имени файла. Этот способ изящнее и удобнее в использовании. | Я выше написал, почему это неудобно.
savigrand wrote: | Вопрос не в том, как решить задачу, а как усовершенсвовать её решение. | Какое решение? То, что sa предложил? Без Гислера не получится... |
|
Back to top |
|
 |
Batya

Joined: 15 Dec 2004 Posts: 2224 Location: Москва, Россия
|
(Separately) Posted: Thu Jun 07, 2012 12:33 Post subject: |
|
|
savigrand wrote: | Но хотелось бы узнать про реализацию с помощью группового переименования, т.к. этот инструмент более гибок в плане применения регулярных выражения на лету (если с помощью скрипта, то надо править сам скрипт, если условия задачи изменились). |
В следующем vbs-скрипте используются регулярные выражения для задания соответствия - см. шапку скрипта в части "Изменяемые параметры":
Code: | '=====================================================================
' Перемещение выделенных файлов\папок в соответствующие им папки на
' противоположной панели TC
' Параметры вызова из TC:
' %L "%T"
'=====================================================================
Option Explicit
Dim EF
Set EF = CreateObject("Scripting.Dictionary")
'========== Изменяемые параметры =====================================
'Массив соответствия, задаваемый регулярными выражениями
EF.Add "^[\dA-Za-z].*$", "0-9-A-Z"
EF.Add "^([А-Яа-я]).*$", "$1"
'=====================================================================
Dim Title, Mess, FSO, ListF, List, Target, Fold, File, NewPath, REx, K, M, i
' Проверяем параметры
Title = "Внимание!"
If WScript.Arguments.Count < 2 Then
Mess = "Неправильно указаны параметры!"
MessQuit
End If
Set FSO = CreateObject("Scripting.FileSystemObject")
ListF = WScript.Arguments(0)
Target = WScript.Arguments(1)
If Right(Target, 1) <> "\" Then Target = Target & "\"
If Not FSO.FileExists(ListF) Then
Mess = "Неправильно указан файл-список обрабатываемых файлов!"
MessQuit
End If
If Not FSO.FolderExists(Target) Then
Mess = "Неправильно указана целевая папка!"
MessQuit
End If
Set REx = New RegExp
List = Split(FSO.OpenTextFile(ListF).ReadAll, vbNewLine)
For Each File In List
Fold = ""
If File <> "" Then
For Each K In EF.Keys
REx.Pattern = K
If REx.Test(FSO.GetFileName(File)) Then
Fold = REx.Replace(FSO.GetFileName(File), EF(K))
Exit For
End If
Next
If Fold <> "" Then
Fold = Target & Fold & "\"
If FSO.FolderExists(Fold) Then
NewPath = NextName(Fold & FSO.GetFileName(File))
If FSO.FileExists (File) Then FSO.MoveFile File, NewPath
If FSO.FolderExists(File) Then
If Right(File, 1) = "\" Then File = Mid(File, 1, Len(File) - 1)
FSO.MoveFolder File, NewPath
End If
End If
End If
End If
Next
MsgBox "Выполнено!", vbOKOnly + vbInformation, "Результат"
Quit
Function NextName(pPath)
Dim lPath, lName, lExt, li, lAdd
Const lQ = 1 'Минимальное количество цифр в номере
With CreateObject("Scripting.FileSystemObject")
lPath = .GetParentFolderName(pPath)
If lPath <> "" Then lPath = lPath & "\"
lName = .GetBaseName(pPath)
lExt = .GetExtensionName(pPath)
NextName = pPath
Do While .FileExists(NextName) Or .FolderExists(NextName)
li = li + 1
If li < 10^lQ Then
lAdd = Right(String(lQ, "0") & li, lQ)
Else
lAdd = li
End If
NextName = lPath & lName & "_" & lAdd & "." & lExt
Loop
End With
End Function
Sub MessQuit
MsgBox Mess, vbOKOnly + vbError, Title
Quit
End Sub
Sub Quit
Set FSO = Nothing
Wscript.Quit
End Sub |
_________________ Нет, я не сплю. Я просто медленно моргаю. |
|
Back to top |
|
 |
|
|
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
|