| 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 
 
		 |