Страница 1 из 2
Массовое переименовывание файлов в подкаталогах
Добавлено: Вс май 30, 2010 17:40
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 папок как то долговато будет)))Надеюсь суть вопроса понятна.Заранее спасибо.
Добавлено: Вс май 30, 2010 19:44
Вахмурка
Про имена исходных файлов ничего не сказано. Допустим, что они имеют одинаковые имена в разных директориях:
Код: Выделить всё
FILES/0001/a.txt
FILES/0001/b.txt
FILES/0001/c.txt
тогда задача легко решается батником
Затем через команду for в батнике сделать обход всех директорий и в каждой выполнить данный набор команд. Ничего лучше в голову не приходит. Попробовал поиграться с вложенными командами for, но ничего не получилось.
Подожди, скоро придет
Tol!k и напишет тебе батник.
Добавлено: Вс май 30, 2010 20:01
Flasher
deniel87 писал(а):Можно конечно использовать груповое переименовывание в TС, но в ручную 1000 папок как то долговато будет)
Хм. А дерево на что? Ctrl+F8, выделил нужные папки и понеслась.

Добавлено: Вс май 30, 2010 20:25
Вахмурка
По-моему, директории ему-то как раз переименовывать не надо. Дерево здесь не поможет. И вообще, выделение директорий к дереву отношения не имеет. Или я чего-то не понял?
Добавлено: Вс май 30, 2010 21:25
Tol!k
Flasher, нужна не сквозная нумерация, а "в каждой папке нумерация файлов должна быть 01,02,03..."
Добавлено: Вс май 30, 2010 21:25
Flasher
Что-то меня и правда не туда понесло. Ctrl+Shift+B в дереве всё равно не сработает по понятным причинам, хотя Гислеру бы не мешало предложить, чтобы по некой команде, например, cm_DirBranchTreeSel и по клавише Ctrl+Alt+B все файлы из выделенных папок выводились в другой панели.
Жаль, что папок так много, в строке поиска не поместятся. Но на всякий предлагаю выделить в дереве папки, сохранить выделение в файл, а потом либо Batya, либо Tol'k свояют скрипт, тем более, что на форуме списки обрабатывались ими не единожды. Например,
тут,
тут, где-то ещё есть..
Добавлено: Вс май 30, 2010 21:52
Tol!k
О, так всё ж
уже написано!
Flasher, где ты был раньше, я успел батник написать
deniel87
заменяешь в скрипте
и
Код: Выделить всё
' NewName = G & Delimiter & P & Delimiter & GeneralWord & Delimiter & Num(Counter(PF), Precision) & Ext
NewName = Num(Counter(PF), Precision) & Ext
жмёшь Ctrl+B, выделяешь файлы;
нажимаешь кнопку и выпиваешь за здоровье
Бати
Добавлено: Вс май 30, 2010 22:45
Flasher
Tol!k писал(а):жмёшь Ctrl+B, выделяешь файлы; нажимаешь кнопку
А если вложенность разная, и файлы не из всех подкаталогов надо обрабатывать, то как быть?
Tol!k писал(а):Flasher, где ты был раньше, я успел батник написать
На сколько? На пол секунды? 
Добавлено: Вс май 30, 2010 23:00
Tol!k
Flasher писал(а):А если вложенность разная, и файлы не из всех подкаталогов надо обрабатывать, то как быть?
В запросе ничего про выборочное переименование, а с разной вложенностью скрипт справляется.
Tol!k писал(а):На пол секунды?

Да я на себя злой, что делал бесполезную работу. Ну ты понял

Добавлено: Вс май 30, 2010 23:29
Flasher
Tol!k писал(а):В запросе ничего про выборочное переименование, а с разной вложенностью скрипт справляется.
Пока да, ну вот, допустим, я поставил. Нужно файлы, находящиеся в разных по вложенности подкаталогах, например, выделенные выборочно в дереве, переименовывать с учётом предложенного алгоритма.
Tol!k писал(а):Ну ты понял
Само собой.

Добавлено: Пн май 31, 2010 00:00
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].* остаются без изменения (в отличии от
Батиного скрипта)
Добавлено: Пн май 31, 2010 01:15
deniel87
Спасибо Tol!k второй скрипт самое оно!
Добавлено: Пн май 31, 2010 13:41
Tol!k
Изменение: теперь при работе не создаётся временный файл
Добавлено: Пн май 31, 2010 14:58
Flasher
Tol!k
Вот и не бесполезная вовсе работа оказалась. Работает чётко! Молоток!

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

Добавлено: Вт июн 01, 2010 13:02
Tol!k
+ Доп. параметр /S – переименовывать файлы во вложенных папках