Массовое переименовывание файлов в подкаталогах

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер

deniel87
Сообщения: 3
Зарегистрирован: Вс май 02, 2010 15:05

Массовое переименовывание файлов в подкаталогах

Сообщение deniel87 »

Доброго дня.Нужно решить вот такую задачку.Имееться папка допустим [FILES] в этой папке находяться подпапки вида 0001,0002,0003....0999.В каждой из этих подпапок содержиться некоторое количество файлов (от 10 до 30).Нужно переименовать файлы в каждой подпапке по счетчику.

ПРИМЕР

FILES/0001/01.txt
FILES/0001/02.txt
FILES/0001/03.txt
и т.д


FILES/0002/01.txt
FILES/0002/02.txt
FILES/0002/03.txt
и т.д

в каждой папке нумерация файлов должна быть 01,02,03...и т.д

прблема в том что все программы которыми я пробовал переименовывать отказывались работать с подкаталогами.Можно конечно использовать груповое переименовывание в TС, но в ручную 1000 папок как то долговато будет)))Надеюсь суть вопроса понятна.Заранее спасибо.
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

Про имена исходных файлов ничего не сказано. Допустим, что они имеют одинаковые имена в разных директориях:

Код: Выделить всё

FILES/0001/a.txt
FILES/0001/b.txt
FILES/0001/c.txt
тогда задача легко решается батником

Код: Выделить всё

ren a.txt 001.txt
ren b.txt 002.txt
Затем через команду for в батнике сделать обход всех директорий и в каждой выполнить данный набор команд. Ничего лучше в голову не приходит. Попробовал поиграться с вложенными командами for, но ничего не получилось.
Подожди, скоро придет Tol!k и напишет тебе батник.
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

deniel87 писал(а):Можно конечно использовать груповое переименовывание в TС, но в ручную 1000 папок как то долговато будет)
Хм. А дерево на что? Ctrl+F8, выделил нужные папки и понеслась. :wink:
Аватара пользователя
Вахмурка
Сообщения: 2587
Зарегистрирован: Пн дек 27, 2004 14:47
Откуда: Большая деревня Москва
Контактная информация:

Сообщение Вахмурка »

По-моему, директории ему-то как раз переименовывать не надо. Дерево здесь не поможет. И вообще, выделение директорий к дереву отношения не имеет. Или я чего-то не понял?
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Flasher, нужна не сквозная нумерация, а "в каждой папке нумерация файлов должна быть 01,02,03..."
Последний раз редактировалось Tol!k Вс май 30, 2010 21:27, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Что-то меня и правда не туда понесло. Ctrl+Shift+B в дереве всё равно не сработает по понятным причинам, хотя Гислеру бы не мешало предложить, чтобы по некой команде, например, cm_DirBranchTreeSel и по клавише Ctrl+Alt+B все файлы из выделенных папок выводились в другой панели.
Жаль, что папок так много, в строке поиска не поместятся. Но на всякий предлагаю выделить в дереве папки, сохранить выделение в файл, а потом либо Batya, либо Tol'k свояют скрипт, тем более, что на форуме списки обрабатывались ими не единожды. Например, тут, тут, где-то ещё есть..
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

О, так всё ж уже написано! Flasher, где ты был раньше, я успел батник написать :evil:
deniel87
заменяешь в скрипте

Код: Выделить всё

Const Precision = 2
и

Код: Выделить всё

'      NewName = G & Delimiter & P & Delimiter & GeneralWord & Delimiter & Num(Counter(PF), Precision) & Ext
       NewName = Num(Counter(PF), Precision) & Ext
жмёшь Ctrl+B, выделяешь файлы;
нажимаешь кнопку и выпиваешь за здоровье Бати
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k писал(а):жмёшь Ctrl+B, выделяешь файлы; нажимаешь кнопку
А если вложенность разная, и файлы не из всех подкаталогов надо обрабатывать, то как быть?
Tol!k писал(а):Flasher, где ты был раньше, я успел батник написать :evil:
На сколько? На пол секунды? :lol:
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Flasher писал(а):А если вложенность разная, и файлы не из всех подкаталогов надо обрабатывать, то как быть?
В запросе ничего про выборочное переименование, а с разной вложенностью скрипт справляется.
Tol!k писал(а):На пол секунды? :lol:
Да я на себя злой, что делал бесполезную работу. Ну ты понял :)
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k писал(а):В запросе ничего про выборочное переименование, а с разной вложенностью скрипт справляется.
Пока да, ну вот, допустим, я поставил. Нужно файлы, находящиеся в разных по вложенности подкаталогах, например, выделенные выборочно в дереве, переименовывать с учётом предложенного алгоритма.
Tol!k писал(а):Ну ты понял
Само собой. :wink:
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Flasher писал(а):Нужно файлы, находящиеся в разных по вложенности подкаталогах, например, выделенные выборочно в дереве, переименовывать с учётом предложенного алгоритма.
Пробуй

Код: Выделить всё

@echo off &chcp 1251 >nul &setlocal enableextensions

rem  Файлы, находящиеся в папках, например, выделенных выборочно в дереве,
rem  переименовываются по счётчику [0-9][0-9].*
rem  Счётчик начинается с 01 в каждой папке.
rem  Файлы подходящие под маску [0-9][0-9].* остаются без изменения.
rem  Параметры: список_папок /S
rem    /S – переименовывать файлы во вложенных папках
rem  Пример параметров при вызове из TC: %L
rem  Автор: Tol!k

for /f "usebackq delims=" %%d in ("%~1") do call :d "%%d"
if /i "%~2"=="/s" for /f "delims=" %%d in (
'for /f "usebackq delims=" %%s in ^("%~1"^) do @dir /s/b/ad "%%s"'
) do call :d "%%d"
goto :eof

:d
set /a cnt=0
for /f "delims=" %%f in ('dir /b/a-d/on "%~1" ^|^
findstr /v /i /r /b /e /c:"[0-9][0-9]\.[^^\.]*"') do call :f "%~1\%%f"
goto :eof

:f
set /a cnt+=1
if "%cnt%"=="100" (title STOP &echo Досчитали до 100. &pause >nul &exit)
set "name=0%cnt%"
set "name=%name:~-2%"
ren %1 "%name%%~x1" 2>nul &&title %name% "%~dp1" ||call :f %1
goto :eof
Выделять нужно папки, а не файлы.
Файлы подходящие под маску [0-9][0-9].* остаются без изменения (в отличии от Батиного скрипта)
Последний раз редактировалось Tol!k Вт июн 01, 2010 13:01, всего редактировалось 3 раза.
deniel87
Сообщения: 3
Зарегистрирован: Вс май 02, 2010 15:05

Сообщение deniel87 »

Спасибо Tol!k второй скрипт самое оно!
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

Изменение: теперь при работе не создаётся временный файл
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
Вот и не бесполезная вовсе работа оказалась. Работает чётко! Молоток! :)
Но вот чего бы ещё хотелось, так это переименования файлов во вложенных на разную глубину подкаталогах, если при этом выделен (помимо всех прочих) только корневой. Сделаешь? :roll:
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

Сообщение Tol!k »

+ Доп. параметр /S – переименовывать файлы во вложенных папках
Ответить