Перемещение файлов в папки по первым буквам их имён
Select messages from
# through # FAQ
[/[Print]\]
Goto page 1, 2, 3  Next  :| |:
Total Commander -> Автоматизация Total Commander

#1: Перемещение файлов в папки по первым буквам их имён Author: shveicarLocation: Россия Москва PostPosted: Fri May 04, 2012 19:19
    —
Возникла такая проблема:
В одной панели файлы 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

#2:  Author: FlasherLocation: Москва PostPosted: Fri May 04, 2012 23:30
    —
Мутно.. Что должно быть критерием - символ-разделитель (знак подчёркивания) или указание числа первых совпадающих символов?

shveicar wrote:
Как можно ...
Не только в отношении конкретного топика: после вопроса должен идти соотв. знак "?".

#3:  Author: shveicarLocation: Россия Москва PostPosted: Sat May 05, 2012 00:30
    —
Flasher
Здравствуйте.
Пытался отобразить проблему подробно, но видно не получилось...
Quote:
Что должно быть критерием

В именах присутствуют как цифры, так и буквы, следовательно - Ориентир при переносе - указание числа первых совпадающих символов, длинна которых может меняться (например в параметрах), для более точной сортировки.
Если в скрипте задан ориентир по трем (например) символам, и существуют каталоги с одинаковыми (тремя) начальными символами, то файлы, имеющие в имени те-же самые три одинаковых символа, - остаются на месте, до следующего изменения числа символов в параметрах скрипта.
Все остальные значения в именах файлов, (выходящие за заданный диапазон в параметрах) при переносе - игнорируются. То есть, имена с окончаниями ....1.jpg ...._2.jpg переносятся в один каталог, при условии что он существует и начальные имена файлов и каталогов совпадают.
Спасибо.

#4:  Author: Tol!kLocation: Арзамас PostPosted: Sat May 05, 2012 01:08
    —
Del

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


Last edited by Tol!k on Sat May 05, 2012 01:21; edited 1 time in total

#5:  Author: shveicarLocation: Россия Москва PostPosted: Sat May 05, 2012 01:21
    —
Tol!k
Quote:
Гм. А это что?

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

Да у Batya есть масса замечательных скриптов, - только, с похожими вариантами. Я несколько дней просматривал форум в поисках подходящих для этой задачи "инструментов", но конкретного решения,- так и не нашел. Хотя, не жалею о потраченном времени, поскольку обнаружил много полезного.

#6:  Author: FlasherLocation: Москва PostPosted: Sat May 05, 2012 23:12
    —
shveicar wrote:
и существуют каталоги с одинаковыми (тремя) начальными символами, то файлы, имеющие в имени те-же самые три одинаковых символа, - остаются на месте
shveicar wrote:
Все остальные значения в именах файлов, (выходящие за заданный диапазон в параметрах) при переносе - игнорируются.
Confused И как это понимать? И одно остаётся, и другое игнорируется..

#7:  Author: shveicarLocation: Россия Москва PostPosted: Sat May 05, 2012 23:51
    —
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) - теперь они попадут, каждый в свой каталог, поскольку совпадений нет.

#8:  Author: Tol!kLocation: Арзамас PostPosted: Sun May 06, 2012 00:49
    —
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

проблемы с !

#9:  Author: shveicarLocation: Россия Москва PostPosted: Sun May 06, 2012 01:22
    —
Tol!k
Большое Спасибо, На мелких файлах работает, но что означает проблемы с ! (имеется ввиду символ! в имени?) и в каком месте батника находятся изменяемые параметры - ориентир по числу символов при переносе 3, 4 или 5? Если можно - вынести их в параметры кнопки, будет великолепно.
Сейчас проверю на больших файлах,
Еще раз премного благодарен.

#10:  Author: Tol!kLocation: Арзамас PostPosted: Sun May 06, 2012 01:37
    —
Quote:
что означает
в именах файлов/папок
Quote:
изменяемые параметры
(3,1,123) = от 3 до 123

#11:  Author: shveicarLocation: Россия Москва PostPosted: Sun May 06, 2012 02:35
    —
Quote:
(3,1,123) = от 3 до 123

Извиняюсь за "неграмотность"
То есть значение 1, - меняется не должно?

#12:  Author: Tol!kLocation: Арзамас PostPosted: Sun May 06, 2012 02:47
    —
нет. это шаг

#13:  Author: FlasherLocation: Москва PostPosted: Sun May 06, 2012 21:23
    —
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

#14:  Author: shveicarLocation: Россия Москва PostPosted: Sun May 06, 2012 23:30
    —
Flasher
Отличный скрипт, если сравнивать по скорости, - раз в 5 работает быстрее чем батник, не говоря уже о возможности удобства изменения параметров, Впрочем, каждый пусть сам решает, каким "инструментом" пользоваться.
Большое Всем Спасибо.

#15:  Author: Tol!kLocation: Арзамас PostPosted: Sun May 06, 2012 23:52
    —
а в чём профит изменения параметров?



Total Commander -> Автоматизация Total Commander


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Goto page 1, 2, 3  Next  :| |:
Page 1 of 3

Powered by phpBB © 2001, 2005 phpBB Group