![]() |
Батник для переименования файлов
Уважаемые знатоки! Очень прошу помочь со следующей задачкой: нужен батник для переименования файлов в папке.
Имена файлов нужно заменить на цифры 1.jpg, 2.jpg, 3.jpg .... n.jpg Имена файлов могут быть любые - могут содержать символы % и !. В эти символы я, собственно, и уперся при попытке написать переименовалку самостоятельно: @echo off setlocal for %%i in (*.jpg) do call:ren "%%i" goto:eof :ren set "file=%~1" ren %1 %file:!=% переименовывает все, кроме файлов с символами "%" в названии. Если включаю setlocal enabledelayedexpansion и пробую аналогично убирать из названия %, то не срабатывает на файлах, в которых есть символы "!". Мог бы сделать по-очереди, но встречаются файлы, в которых есть и то и другое - их ничего не берет:(( Может кто что подскажет? |
Код:
@for /f "delims=" %%i in ('"dir /a-d/b *.jpg"') do @set /a n+=1& cmd /v:on /c ren "%%i" !n!.jpg |
[решено] Спасибо огромное!
|
Цитата:
|
Цитата:
Iska, ну эта проблема решаема: Код:
@echo off . Может встретится и ещё одна "неприятность": в составе имен переименуемых файлов могут быть имена глобальных переменных в окружении знаков процента. Думаю, понятно, к чему это может привести. Но и эта проблема решаема: Код:
@echo off . Таким образом, если объединить оба решения, получится такой код: Код:
@echo off . |
Georgio, Спасибо за код.
Подскажите пожалуйста, как в этом коде указать конкретный путь к каталогу? Чтобы переименование происходило именно в нем. Код:
@for /f "delims=" %%i in ('"dir /a-d/b *.mp3"') do @set /a n+=1& cmd /v:on /c ren "%%i" !n!.mp3 |
Цитата:
Код:
BoxIn = "Z:\Box_In" Если нужен такой вид, то закомментируйте предыдущую строку и откомментируйте эту (убрать ') При этом если файлов более 99999, то увеличьте число нулей в j = 100000 |
temphard,
Вот еще вариант. Введен фильтр на расширение файлов в папке.
Можно указать папку явно. Можно указать её в аргументе в кавычках при вызове скрипта. Можно создать ярлык на этот скрипт и в проводнике затягивать обрабатываемую папку на него Код:
BoxIn = "Z:\Box_In" ' Путь к папке (при отсутствии аргумента в вызове скрипта) |
|
|
Цитата:
Код:
@echo off |
как минимум:
Цитата:
Код:
in ('dir /a-d/b "С:\file\*.mp3"^| find /c /v ""') do Код:
in ('"dir /a-d/b "С:\file\*.mp3"| find /c /v """') do |
Powershell, вроде работает:
Код:
$folder = 'C:\temp\2' |
Цитата:
Скрытый текст
Код:
@echo off Батник в каталоге с mp3 файлами работает отлично. Но находясь в другом месте, код не срабатывает. Никак не могу правильно указать путь к каталогу, в котором находятся mp3 файлы, чтобы код их переименовал. Спасибо, если сможете помочь. |
Более продвинутый вариант, с подсчётом кол-ва файлов в папке и на этом основании подстановка нулей в начало:
Код:
$files = dir 'C:\temp\2' -file |
Цитата:
|
temphard,
Цитата:
в моем коде путь указан в переменной, можно задать свой путь или изменив его в переменной непосредственно или задав первым параметром, тогда запускать так: Код:
name.bat "C:\Papka" Код:
@echo off |
Цитата:
Код:
$files = dir "C:\temp\1\*.mp3" |
temphard, Не хотел встревать, но:
Вот вариант CMD для нумерации вида 1 2 3 ...
Код:
@Echo Off Вот вариант CMD для нумерации вида 0001 0002 0003 ..0123 ...
Код:
@Echo Off Set "BoxIn=Z:\Box_In" Можно указать её в аргументе в кавычках при вызове скрипта. Например: kuku.bat "D:\tralala\lamca drica ca" Можно создать ярлык на этот скрипт и в проводнике затягивать обрабатываемую папку на него. Но, если в именах файлов есть спецсимволы, берите vbs. |
Всем спасибо за помощь, для моих нужд ваших предложений более, чем достаточно.
Цитата:
В случае, если файл с таким именем уже существует, чтобы он перезаписывался. Главное чтобы скрипт работал быстро. То есть для меня нет так важно, чтобы все файлы были пронумерованы, но чтобы один mp3 файл точно имел имя 1.mp3 Дело в том, что файл 1.mp3 постоянно удаляется (это так надо) и тем не менее такой файл должен всё время появляться в данном каталоге из числа других mp3 файлов. Не обессудьте, если мои объяснения кажутся странными. |
Цитата:
Код:
@Echo Off |
Цитата:
|
Время: 22:09. |
Время: 22:09.
© OSzone.net 2001-