View previous topic :: View next topic |
Author |
Message |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Fri May 04, 2012 19:19 Post subject: Перемещение файлов в папки по первым буквам их имён |
|
|
Возникла такая проблема:
В одной панели файлы 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 |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Fri May 04, 2012 23:30 Post subject: |
|
|
Мутно.. Что должно быть критерием - символ-разделитель (знак подчёркивания) или указание числа первых совпадающих символов?
shveicar wrote: | Как можно ... | Не только в отношении конкретного топика: после вопроса должен идти соотв. знак "?".
|
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sat May 05, 2012 00:30 Post subject: |
|
|
Flasher
Здравствуйте.
Пытался отобразить проблему подробно, но видно не получилось...
Quote: | Что должно быть критерием |
В именах присутствуют как цифры, так и буквы, следовательно - Ориентир при переносе - указание числа первых совпадающих символов, длинна которых может меняться (например в параметрах), для более точной сортировки.
Если в скрипте задан ориентир по трем (например) символам, и существуют каталоги с одинаковыми (тремя) начальными символами, то файлы, имеющие в имени те-же самые три одинаковых символа, - остаются на месте, до следующего изменения числа символов в параметрах скрипта.
Все остальные значения в именах файлов, (выходящие за заданный диапазон в параметрах) при переносе - игнорируются. То есть, имена с окончаниями ....1.jpg ...._2.jpg переносятся в один каталог, при условии что он существует и начальные имена файлов и каталогов совпадают.
Спасибо. |
|
Back to top |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sat May 05, 2012 01:21 Post subject: |
|
|
Tol!k
Да, его Я пробовал в первую очередь, но к сожалению в Моем случае он не подходит. Скрипт работает, если имена файлов и каталогов имеют одинаковые имена.
Да у Batya есть масса замечательных скриптов, - только, с похожими вариантами. Я несколько дней просматривал форум в поисках подходящих для этой задачи "инструментов", но конкретного решения,- так и не нашел. Хотя, не жалею о потраченном времени, поскольку обнаружил много полезного. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sat May 05, 2012 23:12 Post subject: |
|
|
shveicar wrote: | и существуют каталоги с одинаковыми (тремя) начальными символами, то файлы, имеющие в имени те-же самые три одинаковых символа, - остаются на месте |
shveicar wrote: | Все остальные значения в именах файлов, (выходящие за заданный диапазон в параметрах) при переносе - игнорируются. |
И как это понимать? И одно остаётся, и другое игнорируется.. |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sat May 05, 2012 23:51 Post subject: |
|
|
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 |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 06, 2012 00:49 Post subject: |
|
|
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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun May 06, 2012 01:22 Post subject: |
|
|
Tol!k
Большое Спасибо, На мелких файлах работает, но что означает проблемы с ! (имеется ввиду символ! в имени?) и в каком месте батника находятся изменяемые параметры - ориентир по числу символов при переносе 3, 4 или 5? Если можно - вынести их в параметры кнопки, будет великолепно.
Сейчас проверю на больших файлах,
Еще раз премного благодарен. |
|
Back to top |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 06, 2012 01:37 Post subject: |
|
|
в именах файлов/папок
Quote: | изменяемые параметры | (3,1,123) = от 3 до 123 |
|
Back to top |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun May 06, 2012 02:35 Post subject: |
|
|
Quote: | (3,1,123) = от 3 до 123 |
Извиняюсь за "неграмотность"
То есть значение 1, - меняется не должно? |
|
Back to top |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 06, 2012 02:47 Post subject: |
|
|
нет. это шаг |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 06, 2012 21:23 Post subject: |
|
|
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 |
|
 |
shveicar

Joined: 18 Apr 2011 Posts: 277 Location: Россия Москва
|
(Separately) Posted: Sun May 06, 2012 23:30 Post subject: |
|
|
Flasher
Отличный скрипт, если сравнивать по скорости, - раз в 5 работает быстрее чем батник, не говоря уже о возможности удобства изменения параметров, Впрочем, каждый пусть сам решает, каким "инструментом" пользоваться.
Большое Всем Спасибо. |
|
Back to top |
|
 |
Tol!k

Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 06, 2012 23:52 Post subject: |
|
|
а в чём профит изменения параметров? |
|
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
|