Показать полную графическую версию : [решено] Переименование файлов в каталоге (.avi)
dokxpi@vk
07-05-2015, 12:43
Доброго времени суток
Нужно все файлы с расширением .avi
привести/переименовать
в следующий вид:
2008-03-07_13.avi
2010-06-28_01.avi
и т. д.
Где 2008-03-07 - <год>.<дата>.<месяц>
создания файлов (когда было снято)
_01 - нумерация файлов в текущий папке
По возможности: добавить рекурсию, но
чтобы в каждом вложенном каталоге,
нумерация файлов начиналась с _01 а не
продолжался общий счет
Заранее благодарен
megaloman
07-05-2015, 18:27
@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 файлов?
В приведенном батнике файлы отсортированы по дате последнего изменения, соответственно ведётся и нумерация.
dokxpi@vk
07-05-2015, 18:42
megaloman, что-то не так, даже не запускается
dokxpi@vk
07-05-2015, 19:00
<год>.<дата>.<месяц>
Сорри.. <год>.<месяц>.<дата>
Вы уверены, что в папке не более 99 файлов? »
Меньше
не понятно, что такое нумерация файла в папке »
Я просто хотел сказать, что если папка новая, то считать нужно начинать с 1
будьте любезны озаботиться чтобы батник был в 866 кодировке (ДОС)/ Проверьте, маска файла правильная? Set "Mask=*.avi" »
С этим всё в порядке, изначально маску изменил на .avi и сохранил в 866 кодировке...
dokxpi@vk
07-05-2015, 19:16
Нечего не происходит, с файлами точно
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"
megaloman
07-05-2015, 19:37
@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"
??????????????? :cool:
dokxpi@vk
08-05-2015, 01:35
echo ren %1 "%DC%_%Count:~-2%%~x1" »
https://yadi.sk/i/Ltf8y4zugViaZ
Исправил неточность в первоначальном коде вверху. Код рабочий.
Забрал (https://gist.github.com/dokxpi/a875e0e0262be6e5fe75)
Спасибо, вам большое!
dokxpi@vk
08-05-2015, 02:06
Всё гуд,
единственное — обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫"
dokxpi@vk
08-05-2015, 03:14
Пакетный файл положить в корневую папку и запустить. »
Никаких эмоций, не работает
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки
https://yadi.sk/i/HkyGmPIDgVneK
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки »
Старайтесь изначально:
Где 2008-03-07 - <год>.<дата>.<месяц>
создания файлов (когда было снято) »
точно формулировать задачу.
Вкупе с:
обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫" »
полагаю, что лучше будет пользовать PowerShell.
Код PowerShell: gci '*.avi' -Recurse|%{rni $_ ((Get-Date ($x=(New-Object -ComObject Shell.Application).NameSpace(($y=$_.DirectoryName))).GetDetailsOf($x.ParseName($_.Name),12) -Format 'yyyy-MM-dd')+'_'+$(if($y -ne $z){$i=1};($i++).ToString().PadLeft(2,'0');$z=$y)+'.avi')}.
.GetDetailsOf($x.ParseName($_.Name),12) »
Там не зависит от версии ОС?
Там не зависит от версии ОС? »
Понятия не имею. Я бы действительно рекомендовал устанавливать это число экспериментально, например, для русифицированных версий ОС код PowerShell для этого действия должен выглядеть примерно так: 1..40|%{if((New-Object -ComObject Shell.Application).NameSpace((gi Env:SystemDrive).Value).GetDetailsOf('',$_) -eq 'Дата съемки'){$_;break}} (мой вариант).
Кстати, если даже установить это число наверняка, то далеко не факт, что этот пункт будет иметь непустое значение, поэтому в таком случае надо использовать дату создания, а для этого нужно "разветвлять" код.
У меня большое предчувствие, что ТС считает возможным переименовывать файлы по дате съёмки с помощью "чистого" пакетного файла. Если бы речь шла просто о дате создания, то можно было бы попробовать написать код пакетного файла (нечто подобное я уже где-то писал), но не знаю, стоит ли игра свеч.
dokxpi@vk
08-05-2015, 19:43
точно формулировать задачу. »
Iska, а вы что-то другое процитировали? я же первоначально уточнил
создания файлов (когда было снято)
---------------------------
обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫"
Чёрт с ним ...!
Главное поправить
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки »
---------------------------
У меня большое предчувствие, что ТС считает возможным переименовывать файлы по дате съёмки с помощью "чистого" пакетного файла. »
Есть такое, так я и полагал
я же первоначально уточнил »
создания файлов (когда было снято)
Это Вы только сейчас жирным шрифтом уточнили. А слова «создания файлов» трактуются достаточно однозначно.
Есть такое, так я и полагал »
Это никак не выйдет. Разве что какими-нибудь сторонними утилитами типа ReNamer (http://www.den4b.com/?x=products&product=renamer). Там есть и мета-тэги: ReNamer:Meta Tags - den4b Wiki (http://www.den4b.com/wiki/ReNamer:Meta_Tags) (но даты съёмки/записи avi там нет), и возрастающая нумерация: ReNamer:Rules:Serialize - den4b Wiki (http://www.den4b.com/wiki/ReNamer:Rules:Serialize). Кстати сказать, и в свойствах файла Проводника Windows эта информация из *.avi у меня также не отображается (под Windows 7 в данный момент).
dokxpi@vk
21-05-2015, 00:44
Это никак не выйдет. Разве что какими-нибудь сторонними утилитами типа ReNamer.
Нашёл
Total Commander ->Групповое переименование -> shelldetails ( wdx) -> [=shelldetails.Дата создания мультимедиа.D-M-Y]#0[C]
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.