CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Ответить
Аватара пользователя
surrender1

CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

Добрый день. Помогите пожалуйста с написанием батника, который бы выполнял следующее:

в определенной папке существуют файлы (количество не постоянное и может быть большим) с различными расширениями, такими как doc, jpg, png и т.д. Имя состоит из адреса электронной почты слитно с именем и фамилией человека. Например:



[url=mailto:petya@mail.ru]petya@mail.ru[/url]Пупкин Петя.jpg

[url=mailto:petya@mail.ru]petya@mail.ru[/url]Пупкина Аня.jpg

[url=mailto:vasya@mail.ru]vasya@mail.ru[/url]Петров Вася.doc

........

[url=mailto:ivanov@mail.com]ivanov@mail.com[/url]Иванов Алексей.png



По умолчанию между адресом почты и фамилией нет пробела, но если критично, то пробел можно вставить, но удобнее было бы так как есть.

Существует каталог, пусть будет d:\какаятопапка.

Так вот, нужен батник который бы в каталоге d:\какаятопапка создал каталог (если такого еще не имеется) с именем адреса электронной почты и поместил в него файл, с исключением из имени файла адреса электронной почты, если такой каталог имеется, то просто переместить в него файл, опять таки с исключением из имени файла адреса электронной почты.

Т.е. файл *\petya@mail.ruПупкин Петя.jpg стал файлом d:\какаятопапка\petya@mail.ru\Пупкин Петя.jpg
Аватара пользователя
Iska

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение Iska »

surrender1, главная проблема — как выделить адреса. В связи с этим три вопроса:



1) перечислите все возможные корневые домены Ваших адресов электронной почты: «.ru», «.com» и т.д.;

2) фамилия/имя всегда на русском или может быть и латиница?

3) укажите Вашу ОС.
Аватара пользователя
surrender1

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

1. На данный момент имеються ru, com, co.cc, но могут быть любые.

2. Ну на английском пока не встречалось, но может быть и такое.

3. XP, может быть когда ни будь server 2003.
Аватара пользователя
surrender1

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

Цитата surrender1:



1. На данный момент имеються ru, com, co.cc, но могут быть любые.

2. Ну на английском пока не встречалось, но может быть и такое.
CMD/BAT - перемещение файлов в каталог созданный из части имени файла




В таком случае, я не представляю себе, каким образом можно будет гарантированно распознать конец корневого домена и начало имени. Пока что можно, например, так, на WSH (если у кого-нибудь, особо, гм, продвинутого, нет домена «.рф»):


читать дальше »




Код:

Код: Выделить всё

Option Explicit
Dim strSourceFolder 'в определенной папке
Dim strDestFolder   'Существует каталог, пусть будет d:\какаятопапка.
Dim strNewFolder    'создал каталог (если такого еще не имеется) с именем адреса электронной почты
Dim objFSO
Dim objFile
strSourceFolder = "E:\Песочница\0324"
strDestFolder   = "d:\какаятопапка"
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FolderExists(strSourceFolder) Then
	If objFSO.FolderExists(strDestFolder) Then
		With WScript.CreateObject("VBScript.RegExp")
			.Pattern = "^(.+@.+?)([А-Яа-я ]+\..*)$"
			For Each objFile In objFSO.GetFolder(strSourceFolder).Files
				If .Test(objFile.Name) Then
					With .Execute(objFile.Name)
						strNewFolder = objFSO.BuildPath(strDestFolder, .Item(0).Submatches(0))
						If Not objFSO.FolderExists(strNewFolder) Then
							objFSO.CreateFolder strNewFolder
						End If
						objFile.Name = .Item(0).Submatches(1)
						objFile.Move strNewFolder & "\"
					End With
				End If
			Next
		End With
	Else
		WScript.Echo "Can't find destination folder [" & strDestFolder & "]."
	End If
Else
	WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
End If
Set objFSO = Nothing
WScript.Quit 0
Аватара пользователя
surrender1

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

Цитата Iska:



Цитата surrender1:

1. На данный момент имеються ru, com, co.cc, но могут быть любые.

2. Ну на английском пока не встречалось, но может быть и такое. »

В таком случае, я не представляю себе, каким образом можно будет гарантированно распознать конец корневого домена и начало имени. Пока что можно, например, так, на WSH (если у кого-нибудь, особо, гм, продвинутого, нет домена «.рф»):
CMD/BAT - перемещение файлов в каталог созданный из части имени файла




Корневой домен зависит от пользователей, на данный момент существуют пользователи со стандартными ru и com (ну и не стандартный co.cc), и с именами и фамилиями на русском языке. Как будет дальше, кто его знает...

За скрипт спасибо огромнейшее!

Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно?
Аватара пользователя
surrender1

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

Еще один момент, если впервые создается каталог с именем адреса электронной почты, то необходимо, что бы в этом каталоге создался каталог "отправленные" (для архивирования).
Аватара пользователя
surrender1

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

Цитата surrender1:



Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно?
CMD/BAT - перемещение файлов в каталог созданный из части имени файла




Конечно. Тогда можно будет обойтись и простым пакетным файлом. Нужен?




Цитата surrender1:



Еще один момент, если впервые создается каталог с именем адреса электронной почты, то необходимо, что бы в этом каталоге создался каталог "отправленные" (для архивирования).
CMD/BAT - перемещение файлов в каталог созданный из части имени файла




Добавьте:



Код:

Код: Выделить всё

objFSO.CreateFolder objFSO.BuildPath(strNewFolder, "отправленные")

после:



Код:

Код: Выделить всё

objFSO.CreateFolder strNewFolder
Аватара пользователя
surrender1

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение surrender1 »

Цитата Iska:



Цитата surrender1:

Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно? »

Конечно. Тогда можно будет обойтись и простым пакетным файлом. Нужен?

Цитата surrender1:

Еще один момент, если впервые создается каталог с именем адреса электронной почты, то необходимо, что бы в этом каталоге создался каталог "отправленные" (для архивирования). »

Добавьте:

Код:

objFSO.CreateFolder objFSO.BuildPath(strNewFolder, "отправленные")

после:

Код:

objFSO.CreateFolder strNewFolder
CMD/BAT - перемещение файлов в каталог созданный из части имени файла




Спасибо. что то наподобие я уже сам написал )) только с добавлением еще одной переменной.

А на счет "Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно?" можно что нибудь придумать?
Аватара пользователя
Iska

Re: CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Сообщение Iska »

Цитата surrender1:



можно что нибудь придумать?
CMD/BAT - перемещение файлов в каталог созданный из части имени файла




Можно:


читать дальше »




Код:

Код: Выделить всё

@echo off
setlocal enableextensions enabledelayedexpansion
set sSourceFolder=C:\Песочница\034
set sDestFolder=d:\какаятопапка
if exist "%sSourceFolder%\." (
	pushd "%sSourceFolder%"
	if exist "%sDestFolder%\." (
		for /f "usebackq tokens=1* delims= " %%i in (`dir /b /a:-d /o:n "*@*.*"`) do (
			set sNewFolder=%sDestFolder%\%%~i
			if not exist "!sNewFolder!\." md "!sNewFolder!"
			if not exist "!sNewFolder!\отправленные\." md "!sNewFolder!\отправленные"
			>nul copy /y "%%~i %%~j" "!sNewFolder!\%%~j"
			del /f /q "%%~i %%~j"
		)
	) else (
		echo Can't find destination folder [%sDestFolder%].
	)
	popd
) else (
	echo Can't find source folder [%sSourceFolder%].
)
endlocal
exit /b 0
Ответить

Вернуться в «Скриптовые языки администрирования Windows»