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

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

Ответить
Настройки темы
CMD/BAT - Сортирование файлов по папкам (копирование в многоуровневые папки по дате создания)

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


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

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


Здравствуйте, помогите пожалуйста с батником. За месяц создается несколько тысяч файлов, и сортировать их вручную довольно долго.
Нужно следующие:
Есть папка с большим кол-вом файлов вида:

M11_Pob87_Cam_01_20131001_135437_0954.avi
M11_Pob87_Cam_02_20131001_135504_1006.avi
M11_Pob87_Cam_03_20141001_151822_0813.avi
M11_Pob87_Cam_04_20141001_155122_0922.avi
M11_Pob87_Cam_05_20141001_180623_0949.avi
M11_Pob87_Cam_06_20141001_185636_0995.avi

M11_Pob87_Cam_01 - название камеры
20141001 - дата создания файла
135437_0954 - временная метка

Нужно чтобы скрипт создал многоуровневый каталог с папками и подпапками следующего вида
Год
Cam_**
Месяц
День
Дату создания можно брать из названия файла или определить скриптом, как будет проще
Заранее благодарен за помощь!

Отправлено: 11:43, 02-10-2014

 

Ветеран


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

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


Systems, пробуйте:


Код: Выделить весь код
@echo off

:: Обрабатываемый диск
set "drive=E:"

:: Папка назначения
set "out=E:\_Backup_"

for /f "delims=" %%i in ('2^>nul dir /ad/b "%drive%\Cam_*"') do (
 for /f "delims=" %%j in ('2^>nul dir /a-d/b/s "%drive%\%%i\*.avi"') do (
  set file=%%~nj
  call set "folder=%%file:~-20,4%%\%%file:~-27,6%%\%%file:~-16,2%%\%%file:~-14,2%%"
  2>nul call md "%out%\%%folder%%"
  >nul call move "%%j" "%out%\%%folder%%"
  )
 )

exit /b

.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:49, 02-10-2014 | #11



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

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


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


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

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


Спасибо огромное, все работает просто замечательно!

Отправлено: 19:07, 02-10-2014 | #12


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


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

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


Добрый день, еще небольшая просьба, после переноса файлов остаються папки с файлами *.log, для прмера evt_20141001_151835022.log
Можно в этом же скрипте после переноса *.avi удалить все папки с оставшимися файлами.
Удалить нужно папки которые находятся по вложению после e:\Cam_02\Video\Event, для примера
e:\Cam_01\Video\Event\20141001\09 - нужно удалить все папки с оставшимися в них файлами 20141001\09, 20141001\10, 20141002\08, 20141002\11 и так далее
e:\Cam_02\Video\Event\20141001\09 - нужно удалить все папки с оставшимися в них файлами 20141001\08, 20141001\13, 20141002\12, 20141002\14 и так далее

Отправлено: 09:18, 03-10-2014 | #13


Ветеран


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

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


Systems, дополнил:


Код: Выделить весь код
@echo off

:: Обрабатываемый диск
set "drive=E:"

:: Папка назначения
set "out=E:\_Backup_"

for /f "delims=" %%i in ('2^>nul dir /ad/b "%drive%\Cam_*"') do (
 for /f "delims=" %%j in ('2^>nul dir /a-d/b/s "%drive%\%%i\*.avi"') do (
  set file=%%~nj
  call set "folder=%%file:~-20,4%%\%%file:~-27,6%%\%%file:~-16,2%%\%%file:~-14,2%%"
  2>nul call md "%out%\%%folder%%"
  >nul call move "%%j" "%out%\%%folder%%"
  )
 for /f "delims=" %%j in ('2^>nul dir /ad/b "%drive%\%%i\Video\Events"') do (
  rd /q/s "%drive%\%%i\Video\Events\%%j"
  )
 )

exit /b

.

Отправлено: 09:59, 03-10-2014 | #14


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


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

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


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

Отправлено: 10:28, 03-10-2014 | #15


Ветеран


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

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


Systems, я просто из-за невнимательности вместо "Event" написал "Events". Вот так правильно:


Код: Выделить весь код
@echo off

:: Обрабатываемый диск
set "drive=E:"

:: Папка назначения
set "out=E:\_Backup_"

for /f "delims=" %%i in ('2^>nul dir /ad/b "%drive%\Cam_*"') do (
 for /f "delims=" %%j in ('2^>nul dir /a-d/b/s "%drive%\%%i\*.avi"') do (
  set file=%%~nj
  call set "folder=%%file:~-20,4%%\%%file:~-27,6%%\%%file:~-16,2%%\%%file:~-14,2%%"
  2>nul call md "%out%\%%folder%%"
  >nul call move "%%j" "%out%\%%folder%%"
  )
 for /f "delims=" %%j in ('2^>nul dir /ad/b "%drive%\%%i\Video\Event"') do (
  rd /q/s "%drive%\%%i\Video\Event\%%j"
  )
 )

exit /b

.

Отправлено: 10:54, 03-10-2014 | #16


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


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

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


Спасибо огромное, все работает.
Со своей стороны я то же недосмотрел что в некоторых каталогах есть еще одна папка Record - которую нужно очищать по тому же принципу что и Event
e:\Cam_01\Video\Record\20141001\09 - нужно удалить все папки с оставшимися в них файлами 20141001\09, 20141001\10, 20141002\08, 20141002\11 и так далее
Можно еще и это добавить в скрипт

Отправлено: 11:16, 03-10-2014 | #17


Ветеран


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

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


Код: Выделить весь код
@echo off

:: Обрабатываемый диск
set "drive=E:"

:: Папка назначения
set "out=E:\_Backup_"

for /f "delims=" %%i in ('2^>nul dir /ad/b "%drive%\Cam_*"') do (
 for /f "delims=" %%j in ('2^>nul dir /a-d/b/s "%drive%\%%i\*.avi"') do (
  set file=%%~nj
  call set "folder=%%file:~-20,4%%\%%file:~-27,6%%\%%file:~-16,2%%\%%file:~-14,2%%"
  2>nul call md "%out%\%%folder%%"
  >nul call move "%%j" "%out%\%%folder%%"
  )
 for /f "delims=" %%j in ('2^>nul dir /ad/b "%drive%\%%i\Video\Event" "%drive%\%%i\Video\Record"') do (
  2>nul rd /q/s "%drive%\%%i\Video\Event\%%j"
  2>nul rd /q/s "%drive%\%%i\Video\Record\%%j"
  )
 )

exit /b
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:33, 03-10-2014 | #18


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


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

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


Спасибо огромное

Отправлено: 11:37, 03-10-2014 | #19



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Копирование папки по дате Daemonstar Скриптовые языки администрирования Windows 9 26-04-2024 23:01
Прочие - [решено] Сортирование файлов по папкам (копирование по дате создания) DIMM2005 Программное обеспечение Windows 36 03-01-2020 16:54
CMD/BAT - [решено] Копирование файлов по дате создания Syna Скриптовые языки администрирования Windows 27 23-05-2013 14:02
CMD/BAT - сортировка файлов по папкам по дате в названии insearches Скриптовые языки администрирования Windows 1 03-02-2013 17:03
CMD/BAT - [решено] Копирование самого позднего по дате создания каталога. SANIOK_AV Скриптовые языки администрирования Windows 2 04-12-2009 17:29




 
Переход