1 (изменено: SufX, 2012-04-12 17:15:45)

Тема: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Добрый день товарищи!
Нужна проф. помощь.
Есть задача: камера делает каждые 20 секунд снимок и заливает его на ftp.
Заливает не просто в корень а создает свою папку с динамическим именем(т.е. каждый день новую) формата
ГГГГ-ММ-ДД, внутри которой папка с именем(статическим) камеры, внутри которой папки с именем(статическим) пользователя, а уже там складываются файлы формата ЧЧ-ММ-СС.jpg
Т.е. путь к файлам такой: C:\ftp1\2012-04-12\IPCam139610\1\*.jpg

Нужно чтобы последний появившийся *.jpg(с динамическим именем), сначала был найден в подкаталогах С:\ftp1 затем переименовывался в статику, а потом перемещался в другую папку, и так по кругу...

Я накалякал вот такой батник:

:loop
ren C:\ftp1\2012-04-12\IPCam139610\1\*.jpg 1.jpg && move /y C:\ftp1\2012-04-12\IPCam139610\1\1.jpg C:\ftp1 && ping -n 1 -w 20000 192.168.254.254 >nul
goto loop

Но он решает проблему с папкой с динамическим именем. Т.е. скрипт однодневка получается=)

Помогите пожалуйста решить проблемму.

2

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Вот скрипт, который создает папку в формате: yyyymmdd, переделай под себя.

set tempdate=%Date%
set day=%tempdate:~0,2%
set month=%tempdate:~3,2%
set year=%tempdate:~6,4%
set dirdate=%year%%month%%day%
md %dirdate%

3

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Я может как-то не так выразился...
Мне не нужно создавать папу с именем в формате даты, мне нужно искать в таких папках jpg файлы, а потом применять мой вышеописанный скрипт(естественно модифицировав его)

4 (изменено: Rumata, 2012-04-12 17:05:09)

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Трудно понять Ваше описание. Что такое динамические и статические имена файлов не понятно.

Лучше опишите проблему так:

Есть файлы вида C:\ftp1\YYYY-MM-DD\USERID\1\HH-MM-SS.jpg
Надо найти самые свежие из них и переместить в C:\ftp1\1.jpg


YYYY-MM-DD - формат даты
HH-MM-SS - формат времени
USERID - имя заданного пользователя

Все верно?

Описание правильно? Надо именно переместить, не скопировать?

( 2 * b ) || ! ( 2 * b )

5

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Да, все верно, тлько нужно сначала найденый jpg файл переименовать, затем именно ПЕРЕМЕСТИТЬ

6

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Не обязательно искать самый свежий, т.к он там будет всегда один (батник, код которого я написал выше, хватает первый попавшийся jpg в папке переименовывает и сразу перемещает в конечную папку.
Т.е в C:\ftp1\YYYY-MM-DD\USERID\1\ файл HH-MM-SS.jpg живет всего какие-то доли секунды)

7

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

SufX пишет:

Я может как-то не так выразился...
Мне не нужно создавать папу с именем в формате даты, мне нужно искать в таких папках jpg файлы, а потом применять мой вышеописанный скрипт(естественно модифицировав его)

Так и не создавай. Я привел рабочий пример из которого видно как получить эти YYYY, MM. DD.

8

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

:: директория в которой ищутся т.н. "динамические" папки
set rdir=C:\ftp1
:: т.н. "константа"
set const=IPCam139610\1
:: ищем папки в C:\ftp1 и помещаем в %pdir% самую новую
for /f %%a in ('dir /b /ad /o-n %rdir%') do (set pdir=%%a)
:: ищем в конечной папки jpeg'и и берём самый первый
for /f %%a in ('dir /b /a-d /o-n %rdir%\%pdir%\%const%\*.jpg') do (set rfile=%%a)
:: копируем найденный jpeg в текущую папку и удаляем исходный
copy %rdir%\%pdir%\%const%\%rfile% 1.jpg
del /f/q %rdir%\%pdir%\%const%\%rfile%

Из-за циклов работает медленно, защиту "от дурака" и обработку исключений делайте сами.

Если в папках, кроме как в искомой нет *.jpg, то можно использовать

dir /b /s C:\ftp1\*.jpg

9

Re: CMD/BAT: Поиск однотипных динамических файлов в динамических папках

Хотя, нет - лгу

:: ищем папки в C:\ftp1 и помещаем в %pdir% самую новую
for /f %%a in ('dir /b /ad /o-n %rdir%') do (set pdir=%%a)

меняем на

:: ищем папки в C:\ftp1 и помещаем в %pdir% самую новую
for /f %%a in ('dir /b /ad /on %rdir%') do (set pdir=%%a)

скрипт целиком

:: директория в которой ищутся т.н. "динамические" папки
set rdir=C:\ftp1
:: т.н. "константа"
set const=IPCam139610\1
:: ищем папки в C:\ftp1 и помещаем в %pdir% самую новую
for /f %%a in ('dir /b /ad /on %rdir%') do (set pdir=%%a)
:: ищем в конечной папки jpeg'и и берём самый первый
for /f %%a in ('dir /b /a-d /o-n %rdir%\%pdir%\%const%\*.jpg') do (set rfile=%%a)
:: копируем найденный jpeg в текущую папку и удаляем исходный
copy %rdir%\%pdir%\%const%\%rfile% 1.jpg
del /f/q %rdir%\%pdir%\%const%\%rfile%