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 

Перемещение файлов в папки по первым буквам их имён
Goto page 1, 2, 3  Next
 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Fri May 04, 2012 19:19    Post subject: Перемещение файлов в папки по первым буквам их имён Reply with quote

Возникла такая проблема:
В одной панели файлы jpg с именами разной длинны
Code:

12_1.jpg
12_2.jpg
aib3.jpg
alenk4.jpg
alenk5.jpg
 

В другой каталоги с именами
Code:
12_mesjatsev
aibolit
alenk_tsvetochek1
alenushka_ivanushka

Как можно переместить файлы в эти каталоги (противоположная панель total commander) Файлы 12_1.jpg, 12_2.jpg и alenk4.jpg, alenk5.jpg должны попасть в одну свою папку соответственно (12_mesjatsev) и (alenk_tsvetochek1)
По логике, если перемещение, заданно по первым трем буквам имени файла то должны переместиться файлы
Code:
 
12_1.jpg
12_2.jpg
aib3.jpg   

а файлы alenk4.jpg, alenk5.jpg остаться на своем месте, из за совпадения в именах каталогов (alenk_tsvetochek1 и
alenushka_ivanushka) Если после этого будет возможность изменить ориентировку на пять букв, то должны переместиться и оставшиеся 3 файла (alenk4.jpg, alenk5.jpg)
Это был бы идеальный вариант.
Спасибо.


Last edited by shveicar on Sun May 06, 2012 14:42; edited 1 time in total
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Fri May 04, 2012 23:30    Post subject: Reply with quote

Мутно.. Что должно быть критерием - символ-разделитель (знак подчёркивания) или указание числа первых совпадающих символов?

shveicar wrote:
Как можно ...
Не только в отношении конкретного топика: после вопроса должен идти соотв. знак "?".
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sat May 05, 2012 00:30    Post subject: Reply with quote

Flasher
Здравствуйте.
Пытался отобразить проблему подробно, но видно не получилось...
Quote:
Что должно быть критерием

В именах присутствуют как цифры, так и буквы, следовательно - Ориентир при переносе - указание числа первых совпадающих символов, длинна которых может меняться (например в параметрах), для более точной сортировки.
Если в скрипте задан ориентир по трем (например) символам, и существуют каталоги с одинаковыми (тремя) начальными символами, то файлы, имеющие в имени те-же самые три одинаковых символа, - остаются на месте, до следующего изменения числа символов в параметрах скрипта.
Все остальные значения в именах файлов, (выходящие за заданный диапазон в параметрах) при переносе - игнорируются. То есть, имена с окончаниями ....1.jpg ...._2.jpg переносятся в один каталог, при условии что он существует и начальные имена файлов и каталогов совпадают.
Спасибо.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sat May 05, 2012 01:08    Post subject: Reply with quote

Del

Гм. А это что?
Перемещение выделенных файлов в соответствующие им папки на противоположной панели TC


Last edited by Tol!k on Sat May 05, 2012 01:21; edited 1 time in total
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sat May 05, 2012 01:21    Post subject: Reply with quote

Tol!k
Quote:
Гм. А это что?

Да, его Я пробовал в первую очередь, но к сожалению в Моем случае он не подходит. Скрипт работает, если имена файлов и каталогов имеют одинаковые имена.

Да у Batya есть масса замечательных скриптов, - только, с похожими вариантами. Я несколько дней просматривал форум в поисках подходящих для этой задачи "инструментов", но конкретного решения,- так и не нашел. Хотя, не жалею о потраченном времени, поскольку обнаружил много полезного.
Back to top
View user's profile Send private message
Flasher



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

Post (Separately) Posted: Sat May 05, 2012 23:12    Post subject: Reply with quote

shveicar wrote:
и существуют каталоги с одинаковыми (тремя) начальными символами, то файлы, имеющие в имени те-же самые три одинаковых символа, - остаются на месте
shveicar wrote:
Все остальные значения в именах файлов, (выходящие за заданный диапазон в параметрах) при переносе - игнорируются.
Confused И как это понимать? И одно остаётся, и другое игнорируется..
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sat May 05, 2012 23:51    Post subject: Reply with quote

Flasher
Добрый ночи.
Quote:
И как это понимать? И одно остаётся, и другое игнорируется

Попробую рассмотреть в таком примере:
В параметрах переноса указан ориентир, (например) 3 символа, 2 разных каталога имеют имена abcd...(a-z) и abc2..(a-z) в них переносятся файлы имеющие имена abcd...(a-z) и и abc2..(a-z) - куда они должны переместиться? - естественно, - никуда, поскольку есть совпадения в пути назначения по первым 3 символам (совпадение подразумевает, одинаковые имена у двух и боле каталогов, в данном случае в первых трех символах).
Далее, попытка переноса номер 2, -параметр числа символов изменен на 4: - те же каталоги, каталог abcd..(a-z) и abc2..(a-z) в них переносятся те же файлы abcd...(a-z) и и abc2..(a-z) - теперь они попадут, каждый в свой каталог, поскольку совпадений нет.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun May 06, 2012 00:49    Post subject: Reply with quote

Code:
@echo off &chcp 1251 >nul
setlocal enableextensions enabledelayedexpansion
::   http://forum.wincmd.ru/viewpost.php?p=92136
::   Пример параметров: "%L" "%T"

for /f "usebackq delims=" %%f in ("%~1") do (
   set "Name=%%~nf" &title "%%~nxf"
   for /l %%n in (3,1,123) do if exist "%%f" (
      set "Same=!Name:~0,%%n!" &set /a dirs=0
      for /f "delims=[]" %%d in ('dir /b/ad "%~2\!Same!*" 2^>nul ^|find /n /v ""') do set /a dirs=%%d
      if "!dirs!"=="1" for /f "delims=" %%a in ('dir /b/ad "%~2\!Same!*"') do move /y "%%f" "%~2\%%a\"
   )
)
goto :eof

проблемы с !
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun May 06, 2012 01:22    Post subject: Reply with quote

Tol!k
Большое Спасибо, На мелких файлах работает, но что означает проблемы с ! (имеется ввиду символ! в имени?) и в каком месте батника находятся изменяемые параметры - ориентир по числу символов при переносе 3, 4 или 5? Если можно - вынести их в параметры кнопки, будет великолепно.
Сейчас проверю на больших файлах,
Еще раз премного благодарен.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun May 06, 2012 01:37    Post subject: Reply with quote

Quote:
что означает
в именах файлов/папок
Quote:
изменяемые параметры
(3,1,123) = от 3 до 123
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun May 06, 2012 02:35    Post subject: Reply with quote

Quote:
(3,1,123) = от 3 до 123

Извиняюсь за "неграмотность"
То есть значение 1, - меняется не должно?
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun May 06, 2012 02:47    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 May 06, 2012 21:23    Post subject: Reply with quote

Code:
'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
' Перемещение выделенных файлов в папки с тем же началом в имени,
' если под этот критерий подходит только одна папка в получателе

' Параметры:
'  1) %WL
'  2) "<путь назначения>"
'  3) <число первых совпавших символов> (при отсутствии вводим в окне)
'  4) <максимальное число символов> (0 - отключить; при отсутствии - в окне)

' Примеры:
'  1) %WL C:\Тест
'  2) %WL "%T" 3 0
'  3) %WL "%T" "" 6
'  4) %WL "%T" 5 20

' Автор - Flasher ©
'•••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••••
With WScript.Arguments
  C = .Count : If C = 0 Then WScript.Quit
  On Error Resume Next
  List = .Item(0) : Path = .Item(1)
  If C < 3 Then
    Num = "" : Chek Num, ""
  Else
    Num = .Item(2) : If Len(.Item(2)) = 0 Then Chek Num, ""
  End If
  If C < 4 Then
    Max = "" : Chek Max, "МАКСИМАЛЬНОЕ "
  Else
    Max = .Item(3) : If Max = 0 Then Max = Num
  End If
  On Error Goto 0
  If C < 2 Then : MsgBox "Укажите не менее 2-ух параметров!", 4144, _
  "Рассортировка файлов по папкам" : WScript.Quit : End if
End With : If Right(Path, 1) <> "\" Then Path = Path & "\"

Sub Chek(Count, Word)
  L = vbNewline
  Do Until IsNumeric(Count)
    Count = InputBox(L&L&L&L&L& "Введите " & Word & "число первых" & _
    " символов в именах:", "Рассортировка файлов по папкам", 3)
    If Trim(Count) = "" Then WScript.Quit
  Loop
End Sub

Set FSO = CreateObject("Scripting.FileSystemObject")
Set SbF = FSO.GetFolder(Path).SubFolders
Set NSp = CreateObject("Shell.Application").NameSpace(Path)
For Each F in Split(FSO.GetFile(List).OpenAsTextStream(1, -1).ReadAll, vbNewline)
  If F > vbNullString Then
    If FSO.FileExists(F) Then
      For i = Num to Max
        Start = Left(FSO.GetBaseName(F), i) : Set Items = NSP.Items
        Items.Filter 32, Start & "*"
        If Items.Count = 1 Then
          For Each FF in SbF
            If StrComp(Start, Left(FSO.GetFileName(FF), i), 1) = 0 Then
              FSO.MoveFile F, FF & "\" : Exit For
            End If
          Next
        End If : Set Items = Nothing
      Next
    End If
  End If
Next : Set FSO = Nothing : Set NSP = Nothing : Set SbF = Nothing : WScript.Quit
Back to top
View user's profile Send private message
shveicar



Joined: 18 Apr 2011
Posts: 277
Location: Россия Москва

Post (Separately) Posted: Sun May 06, 2012 23:30    Post subject: Reply with quote

Flasher
Отличный скрипт, если сравнивать по скорости, - раз в 5 работает быстрее чем батник, не говоря уже о возможности удобства изменения параметров, Впрочем, каждый пусть сам решает, каким "инструментом" пользоваться.
Большое Всем Спасибо.
Back to top
View user's profile Send private message
Tol!k



Joined: 01 Apr 2008
Posts: 1727
Location: Арзамас

Post (Separately) Posted: Sun May 06, 2012 23:52    Post subject: Reply with quote

а в чём профит изменения параметров?
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
Goto page 1, 2, 3  Next
Page 1 of 3

 
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