Переименование файлов в каталоге (.avi)
Доброго времени суток
Нужно все файлы с расширением .avi
привести/переименовать
в следующий вид:
2008-03-07_13.avi
2010-06-28_01.avi
и т. д.
Где 2008-03-07 - <год>.<дата>.<месяц>
создания файлов (когда было снято)
_01 - нумерация файлов в текущий папке
По возможности: добавить рекурсию, но
чтобы в каждом вложенном каталоге,
нумерация файлов начиналась с _01 а не
продолжался общий счет
Заранее благодарен
|
Код:
@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, что-то не так, даже не запускается
|
Сорри.. <год>.<месяц>.<дата>
Цитата:
Цитата megaloman
Вы уверены, что в папке не более 99 файлов? »
|
Меньше
Цитата:
Цитата megaloman
не понятно, что такое нумерация файла в папке »
|
Я просто хотел сказать, что если папка новая, то считать нужно начинать с 1
Цитата:
Цитата megaloman
будьте любезны озаботиться чтобы батник был в 866 кодировке (ДОС)/ Проверьте, маска файла правильная? Set "Mask=*.avi" »
|
С этим всё в порядке, изначально маску изменил на .avi и сохранил в 866 кодировке...
|
Нечего не происходит, с файлами точно
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"
|
Код:
@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:
|
Цитата:
Цитата megaloman
echo ren %1 "%DC%_%Count:~-2%%~x1" »
|
https://yadi.sk/i/Ltf8y4zugViaZ
Цитата:
Исправил неточность в первоначальном коде вверху. Код рабочий.
|
Забрал
Спасибо, вам большое!
|
Всё гуд,
единственное — обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫"
|
Цитата:
Цитата Georgio
Пакетный файл положить в корневую папку и запустить. »
|
Никаких эмоций, не работает
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки
https://yadi.sk/i/HkyGmPIDgVneK
|
Цитата:
Цитата dokxpi@vk
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки »
|
Старайтесь изначально:
Цитата:
Цитата dokxpi@vk
Где 2008-03-07 - <год>.<дата>.<месяц>
создания файлов (когда было снято) »
|
точно формулировать задачу.
Вкупе с:
Цитата:
Цитата dokxpi@vk
обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "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')}
.
|
Цитата:
Цитата Georgio
.GetDetailsOf($x.ParseName($_.Name), 12) »
|
Там не зависит от версии ОС?
|
Цитата:
Цитата Iska
Там не зависит от версии ОС? »
|
Понятия не имею. Я бы действительно рекомендовал устанавливать это число экспериментально, например, для русифицированных версий ОС код PowerShell для этого действия должен выглядеть примерно так:
Код:
1..40|%{if((New-Object -ComObject Shell.Application).NameSpace((gi Env:SystemDrive).Value).GetDetailsOf('',$_) -eq 'Дата съемки'){$_;break}}
(мой вариант).
Кстати, если даже установить это число наверняка, то далеко не факт, что этот пункт будет иметь непустое значение, поэтому в таком случае надо использовать дату создания, а для этого нужно "разветвлять" код.
У меня большое предчувствие, что ТС считает возможным переименовывать файлы по дате съёмки с помощью "чистого" пакетного файла. Если бы речь шла просто о дате создания, то можно было бы попробовать написать код пакетного файла (нечто подобное я уже где-то писал), но не знаю, стоит ли игра свеч.
|
Цитата:
Цитата Iska
точно формулировать задачу. »
|
Iska, а вы что-то другое процитировали? я же первоначально уточнил
Цитата:
создания файлов (когда было снято)
|
---------------------------
Цитата:
обходит папки, в которых, внутри имени присутствует нестандартные символы,
пример такой папки: "media ♫"
|
Чёрт с ним ...!
Главное поправить
Цитата:
Цитата Iska
megaloman, вот только сейчас заметил: файлы переименовывает по дате изменения, а нужно по дате съёмки »
|
---------------------------
Цитата:
Цитата Georgio
У меня большое предчувствие, что ТС считает возможным переименовывать файлы по дате съёмки с помощью "чистого" пакетного файла. »
|
Есть такое, так я и полагал
|
Цитата:
Цитата dokxpi@vk
я же первоначально уточнил »
|
Цитата:
создания файлов (когда было снято)
|
Это Вы только сейчас жирным шрифтом уточнили. А слова «создания файлов» трактуются достаточно однозначно.
Цитата:
Цитата dokxpi@vk
Есть такое, так я и полагал »
|
Это никак не выйдет. Разве что какими-нибудь сторонними утилитами типа ReNamer. Там есть и мета-тэги: ReNamer:Meta Tags - den4b Wiki (но даты съёмки/записи avi там нет), и возрастающая нумерация: ReNamer:Rules:Serialize - den4b Wiki. Кстати сказать, и в свойствах файла Проводника Windows эта информация из *.avi у меня также не отображается (под Windows 7 в данный момент).
|
Цитата:
Это никак не выйдет. Разве что какими-нибудь сторонними утилитами типа ReNamer.
|
Нашёл
Total Commander ->Групповое переименование -> shelldetails ( wdx) ->
Код:
[=shelldetails.Дата создания мультимедиа.D-M-Y]#0[C]
|
Время: 09:46.
© OSzone.net 2001-