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

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

Ответить
Настройки темы
CMD/BAT - [решено] Раскидать файлы по папкам согласно дате в имени файла

Пользователь


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

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


Есть папка, где куча файлов, надо раскидать по папкам (создавая папки) согласно дате в имени файла

Имена файлов _ГГГГММДДЧЧССММ.jpg (пример: _20100401080242.jpg)
Нужное имя папки ГГГГММДД (пример: 20100410)

Отправлено: 10:28, 11-11-2011

 

Аватара для gora

Ушёл из жизни


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

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


Цитата spkvvs:
раскидать по папкам »
Команда "раскидать" заменена на "Copy"
Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder=e:\Temp\Source
:: папка назначения
Set Out=e:\Temp\jpg

For /R "%Folder%" %%i In (*.jpg) Do (
	Set ti=%%~ni
	MD "%Out%\!ti:~1,8!" 2>Nul
	Copy "%%i" "%Out%\!ti:~1,8!">Nul
)
Pause>Nul
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:17, 11-11-2011 | #2



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

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


Ветеран


Contributor


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

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


Если "раскидать" - это переместить, не создавая дубликата файла, то логичнее Copy заменить нa Move, и перемещать не по 1 файлу, а группой по маске (по дате). Цикл For у gora тогда можно переписать в виде
Код: Выделить весь код
For /R "%Folder%" %%i In (*.jpg) Do (
       IF EXIST "%%i" (
	   Set name=%%~ni
           Set mask=!name:~1,8!
           MD "%Out%\!mask!"
           Move "%%~dpi?!mask!*%%~xi" "%Out%\!mask!\"
       )
)
Ежели файлы всё же надо копировать, а не перемещать, то для копирования группой по маске For у gora можно переписать в виде
Код: Выделить весь код
For /R "%Folder%" %%i In (*.jpg) Do (
       Set name=%%~ni
       Set mask=!name:~1,8!
       IF Not EXIST "%Out%\!mask!\*.*" MD "%Out%\!mask!"
       IF Not EXIST "%Out%\!mask!\%%~nxi" Copy "%%~dpi?!mask!*%%~xi" "%Out%\!mask!\"
)
При повторном запуске этого батника перезапись уже скопированных файлов не производится

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 20:06, 11-11-2011 | #3


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


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

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


Господа, поможите...
Нужно примерно то же самое, но:
1) дату нужно брать из атрибутов файла
2) имя создаваемых каталогов - "ДД-ММ" (и не спрашивайте, почему такое дурацкое имя. исторически сложилось)

Отправлено: 11:06, 07-09-2012 | #4


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder=e:\Temp\Source
:: папка назначения
Set Out=e:\Temp\jpg

For /R "%Folder%" %%i In (*.jpg) Do (
	Set tim=%%~ti
	Set tim=!tim:~0,5!
	Set tim=!tim:.=-!
	If Not Exist "%Out%\!tim!" MD "%Out%\!tim!"
	Copy "%%~i" "%Out%\!tim!">Nul
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:55, 07-09-2012 | #5


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


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

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


Спасибо! Работает

Отправлено: 14:03, 07-09-2012 | #6


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


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

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


Так... Условия задачи поменялись

Файлы текстовые, содержимое (текст) каждого файла начинается с даты в формате DDMMYYYY. Т.е. первая строка выглядит как-то так:
30082012|#|08606|0004.......
Необходимо раскидать по тому же принципу, что и в задаче выше.
С меня пиво

Отправлено: 14:37, 07-09-2012 | #7


Аватара для gora

Ушёл из жизни


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

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


Код: Выделить весь код
@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder=e:\Temp\Source
:: папка назначения
Set Out=e:\Temp\jpg

For /R "%Folder%" %%a In (*.txt) Do (
	Set flag=
	For /F "usebackq tokens=* delims=" %%i In ("%%a") Do (
		If Not Defined flag (
			Set flag=1
			Set tim=%%i
			Set tim=!tim:~0,2!-!tim:~2,2!
			If Not Exist "%Out%\!tim!" MD "%Out%\!tim!"
			Copy "%%a" "%Out%\!tim!"
		)
	)
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:56, 07-09-2012 | #8


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


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

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


Спасибо! Вы меня очень сильно выручили!

Отправлено: 15:00, 07-09-2012 | #9

4zz 4zz вне форума

Пользователь


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

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


Уважаемый megaloman!
Помогите победить проблему- в приведенном ниже примере, в случае присутствия пробелов в названии папки из которой запускается батник - он не срабатывает(( , а если пробелов нет, то все ОК.
Т.е. если папка "Январь 22" - не сработает, а если "Январь", то все хорошо.

@Echo Off
SetLocal EnableDelayedExpansion
:: Обрабатываемая папка
Set Folder="%cd%"
:: папка назначения
Set Out="%cd%"

For /R "%Folder%" %%i In (*.*) Do (
Set ti=%%~ni
MD "%Out%\!ti:~0,100!"
Move "%%i" "%Out%\!ti:~0,100!">Nul
)
Pause>Nul

Отправлено: 09:49, 23-02-2022 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] переместить файлы по папкам согласно списку shadowbat Скриптовые языки администрирования Windows 9 17-11-2023 14:51
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
CMD/BAT - Разложить файлы из кучи по каталогам согласно образцу Maartimus Скриптовые языки администрирования Windows 18 14-07-2012 13:37
CMD/BAT - [решено] Поиск файла по маске и по дате Баян Скриптовые языки администрирования Windows 2 14-03-2011 13:32
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58




 
Переход