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

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

Ответить
Настройки темы
CMD/BAT - [решено] Переименование файлов в каталоге (.avi)

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


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

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


Доброго времени суток

Нужно все файлы с расширением .avi
привести/переименовать
в следующий вид:
2008-03-07_13.avi
2010-06-28_01.avi
и т. д.
Где 2008-03-07 - <год>.<дата>.<месяц>
создания файлов (когда было снято)
_01 - нумерация файлов в текущий папке

По возможности: добавить рекурсию, но
чтобы в каждом вложенном каталоге,
нумерация файлов начиналась с _01 а не
продолжался общий счет

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

Отправлено: 12:43, 07-05-2015

 

Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off

Set "Where=D:\Media"
Set "Mask=*.avi"

Set /A Count=1000
FOR /F "usebackq delims=" %%f IN (`Dir "%Where%\%Mask%" /b /A:-D /O:D /T:W 2^>nul`) DO Call :Recount "%Where%\%%f" "%Where%"

FOR /F "usebackq delims=" %%d IN (`Dir "%Where%\" /b /s /A:D  2^>nul`) DO (
	Set /A Count=1000
	FOR /F "usebackq delims=" %%f IN (`Dir "%%d\%Mask%" /b /A:-D /O:D /T:W 2^>nul`) DO Call :Recount "%%d\%%f" "%%d"
)
GoTo :Eof

:Recount
Set /A Count=%Count%+1

Set "DC=%~t1"
Set "DC=%DC:~6,4%-%DC:~3,2%-%DC:~0,2%"

ren %1 "%DC%_%Count:~-2%%~x1"
У Вас мутноватая постановка: 2010-06-28 никак не может быть <год>.<дата>.<месяц>, не понятно, что такое нумерация файла в папке: по какому принципу они отсортированы?
Вы уверены, что в папке не более 99 файлов?
В приведенном батнике файлы отсортированы по дате последнего изменения, соответственно ведётся и нумерация.

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


Последний раз редактировалось megaloman, 07-05-2015 в 19:55. Причина: Исправлена неточность в коде

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

Отправлено: 18:27, 07-05-2015 | #2



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

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


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


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

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


megaloman, что-то не так, даже не запускается

Отправлено: 18:42, 07-05-2015 | #3


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


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

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


Цитата:
<год>.<дата>.<месяц>
Сорри.. <год>.<месяц>.<дата>
Цитата megaloman:
Вы уверены, что в папке не более 99 файлов? »
Меньше
Цитата megaloman:
не понятно, что такое нумерация файла в папке »
Я просто хотел сказать, что если папка новая, то считать нужно начинать с 1

Цитата megaloman:
будьте любезны озаботиться чтобы батник был в 866 кодировке (ДОС)/ Проверьте, маска файла правильная? Set "Mask=*.avi" »
С этим всё в порядке, изначально маску изменил на .avi и сохранил в 866 кодировке...

Отправлено: 19:00, 07-05-2015 | #4


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


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

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


Нечего не происходит, с файлами точно
https://yadi.sk/d/cRkOqGkBgVMDJ (окно запуска)

Код: Выделить весь код
@Echo Off

Set "Where=D:\Media"
Set "Mask=*.avi"

rem FOR /F "usebackq delims=" %%d IN (`Dir "%Where%\" /b /s /A:D`) DO (

FOR /F "usebackq delims=" %%d IN (`Dir /b /s /A:D`) DO (

echo %%d

	Set /A Count=1000
	FOR /F "usebackq delims=" %%f IN (`Dir "%%d\%Mask%" /b /A:-D /O:D /T:W 2^>nul`) DO Call :Recount "%%d\%%f" "%%d"
)
GoTo :Eof

:Recount
Set /A Count=%Count%+1

Set "DC=%~t1"
Set "DC=%DC:~6,4%-%DC:~3,2%-%DC:~0,2%"

rem ren %1 "%DC%_%Count:~-2%%~x1"


echo ren %1 "%DC%_%Count:~-2%%~x1"

Отправлено: 19:16, 07-05-2015 | #5


Ветеран


Contributor


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

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


Код: Выделить весь код
@Echo Off
cls

Set "Where=D:\Media"
Set "Mask=*.avi"

Echo ========= Begin bat =============
pause

Set /A Count=1000
FOR /F "usebackq delims=" %%f IN (`Dir "%Where%\%Mask%" /b /A:-D /O:D /T:W 2^>nul`) DO Call :Recount "%Where%\%%f" "%Where%"

pause

FOR /F "usebackq delims=" %%d IN (`Dir "%Where%\" /b /s /A:D  2^>nul`) DO (
	Set /A Count=1000
	FOR /F "usebackq delims=" %%f IN (`Dir "%%d\%Mask%" /b /A:-D /O:D /T:W 2^>nul`) DO Call :Recount "%%d\%%f" "%%d"
pause
)
GoTo :Eof

:Recount
Set /A Count=%Count%+1

Set "DC=%~t1"
Set "DC=%DC:~6,4%-%DC:~3,2%-%DC:~0,2%"

echo ren %1 "%DC%_%Count:~-2%%~x1"
Попробуйте этот вариант. Что батник выдаёт на экран? Или ничего не выдаёт?
Исправил неточность в первоначальном коде вверху. Код рабочий. Что вверху, что вот этот отладочный (но отладочный реально не переименовывает, так как стоит эхо
echo ren %1 "%DC%_%Count:~-2%%~x1"

???????????????

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


Последний раз редактировалось megaloman, 07-05-2015 в 19:56.

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

Отправлено: 19:37, 07-05-2015 | #6


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


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

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


Цитата megaloman:
echo ren %1 "%DC%_%Count:~-2%%~x1" »
https://yadi.sk/i/Ltf8y4zugViaZ
Цитата:
Исправил неточность в первоначальном коде вверху. Код рабочий.
Забрал
Спасибо, вам большое!

Отправлено: 01:35, 08-05-2015 | #7


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


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

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


Всё гуд,
единственное — обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫"

Последний раз редактировалось dokxpi@vk, 08-05-2015 в 02:34.


Отправлено: 02:06, 08-05-2015 | #8


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


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

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


Цитата Georgio:
Пакетный файл положить в корневую папку и запустить. »
Никаких эмоций, не работает

megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки
https://yadi.sk/i/HkyGmPIDgVneK

Отправлено: 03:14, 08-05-2015 | #9


Ветеран


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

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


Цитата dokxpi@vk:
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки »
Старайтесь изначально:
Цитата dokxpi@vk:
Где 2008-03-07 - <год>.<дата>.<месяц>
создания файлов (когда было снято) »
точно формулировать задачу.

Вкупе с:
Цитата dokxpi@vk:
обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫" »
полагаю, что лучше будет пользовать PowerShell.

Отправлено: 03:20, 08-05-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - [решено] Архивирование файлов в каталоге Tonny_Bennet Скриптовые языки администрирования Windows 53 11-01-2015 13:11
CMD/BAT - Создать список файлов в каталоге PolRusPTZ Скриптовые языки администрирования Windows 7 03-12-2014 14:44
CMD/BAT - Переименование файлов в каталоге flower Скриптовые языки администрирования Windows 2 28-11-2013 15:00
VBS/WSH/JS - Мониторинг файлов в каталоге ugol_divana Скриптовые языки администрирования Windows 1 03-08-2013 17:15
Любой язык - [решено] Распределение файлов в каталоге Тишина Скриптовые языки администрирования Windows 2 26-04-2013 17:09




 
Переход