Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - перемещение файлов в каталог созданный из части имени файла

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

Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

petya@mail.ruПупкин Петя.jpg
petya@mail.ruПупкина Аня.jpg
vasya@mail.ruПетров Вася.doc
........
ivanov@mail.comИванов Алексей.png

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

Отправлено: 17:35, 09-10-2013

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

1) перечислите все возможные корневые домены Ваших адресов электронной почты: «.ru», «.com» и т.д.;
2) фамилия/имя всегда на русском или может быть и латиница?
3) укажите Вашу ОС.

Отправлено: 22:09, 09-10-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


1. На данный момент имеються ru, com, co.cc, но могут быть любые.
2. Ну на английском пока не встречалось, но может быть и такое.
3. XP, может быть когда ни будь server 2003.

Отправлено: 08:11, 10-10-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата surrender1:
1. На данный момент имеються ru, com, co.cc, но могут быть любые.
2. Ну на английском пока не встречалось, но может быть и такое. »
В таком случае, я не представляю себе, каким образом можно будет гарантированно распознать конец корневого домена и начало имени. Пока что можно, например, так, на 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:45, 10-10-2013 | #4


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Цитата surrender1:
1. На данный момент имеються ru, com, co.cc, но могут быть любые.
2. Ну на английском пока не встречалось, но может быть и такое. »
В таком случае, я не представляю себе, каким образом можно будет гарантированно распознать конец корневого домена и начало имени. Пока что можно, например, так, на WSH (если у кого-нибудь, особо, гм, продвинутого, нет домена «.рф»): »
Корневой домен зависит от пользователей, на данный момент существуют пользователи со стандартными ru и com (ну и не стандартный co.cc), и с именами и фамилиями на русском языке. Как будет дальше, кто его знает...
За скрипт спасибо огромнейшее!
Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно?

Отправлено: 11:11, 10-10-2013 | #5


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 11:48, 10-10-2013 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Цитата surrender1:
Еще один момент, если впервые создается каталог с именем адреса электронной почты, то необходимо, что бы в этом каталоге создался каталог "отправленные" (для архивирования). »
Добавьте:
Код: Выделить весь код
objFSO.CreateFolder objFSO.BuildPath(strNewFolder, "отправленные")
после:
Код: Выделить весь код
objFSO.CreateFolder strNewFolder

Отправлено: 12:12, 10-10-2013 | #7


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
Цитата surrender1:
Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно? »
Конечно. Тогда можно будет обойтись и простым пакетным файлом. Нужен?
Цитата surrender1:
Еще один момент, если впервые создается каталог с именем адреса электронной почты, то необходимо, что бы в этом каталоге создался каталог "отправленные" (для архивирования). »
Добавьте:
Код:
objFSO.CreateFolder objFSO.BuildPath(strNewFolder, "отправленные")
после:
Код:
objFSO.CreateFolder strNewFolder »
Спасибо. что то наподобие я уже сам написал )) только с добавлением еще одной переменной.
А на счет "Существует возможность имя файлов формировать с пробелом между е-мылом и фамилией именем. Тогда наверное можно разделять по первому пробелу. Такое ведь возможно?" можно что нибудь придумать?

Отправлено: 12:21, 10-10-2013 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата surrender1:
можно что нибудь придумать? »
Можно:
читать дальше »
Код: Выделить весь код
@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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:10, 10-10-2013 | #9


Новый участник


Сообщения: 6
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо. Выручил!

Отправлено: 14:42, 10-10-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - перемещение файлов в каталог созданный из части имени файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Сравнение файлов по части имени sampir Скриптовые языки администрирования Windows 2 18-11-2012 19:57
CMD/BAT - Перемещение файлов из нескольких папок в одну. BatizhevNH Скриптовые языки администрирования Windows 4 14-05-2012 19:32
CMD/BAT - [решено] Запуск bat-файла от имени админа.Как сделать каталог этого bat-файла текущим?? axmed0207 Скриптовые языки администрирования Windows 1 19-01-2012 06:14
CMD/BAT - [решено] Перемещение файлов из одной папки в разные в зависимости от имени файла Sarge81 Скриптовые языки администрирования Windows 4 20-09-2011 04:20
подгрузка части кода на html-страницу из отдельного файла shmond Вебмастеру 3 04-04-2007 16:43




 
Переход