View previous topic :: View next topic |
Author |
Message |
deniel87
Joined: 02 May 2010 Posts: 3
|
(Separately) Posted: Sun May 30, 2010 17:40 Post subject: Массовое переименовывание файлов в подкаталогах |
|
|
Доброго дня.Нужно решить вот такую задачку.Имееться папка допустим [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 папок как то долговато будет)))Надеюсь суть вопроса понятна.Заранее спасибо. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun May 30, 2010 19:44 Post subject: |
|
|
Про имена исходных файлов ничего не сказано. Допустим, что они имеют одинаковые имена в разных директориях: Code: | FILES/0001/a.txt
FILES/0001/b.txt
FILES/0001/c.txt | тогда задача легко решается батником Code: | ren a.txt 001.txt
ren b.txt 002.txt | Затем через команду for в батнике сделать обход всех директорий и в каждой выполнить данный набор команд. Ничего лучше в голову не приходит. Попробовал поиграться с вложенными командами for, но ничего не получилось.
Подожди, скоро придет Tol!k и напишет тебе батник. _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 30, 2010 20:01 Post subject: |
|
|
deniel87 wrote: | Можно конечно использовать груповое переименовывание в TС, но в ручную 1000 папок как то долговато будет) | Хм. А дерево на что? Ctrl+F8, выделил нужные папки и понеслась. |
|
Back to top |
|
|
Вахмурка
Joined: 27 Dec 2004 Posts: 2584 Location: Большая деревня Москва
|
(Separately) Posted: Sun May 30, 2010 20:25 Post subject: |
|
|
По-моему, директории ему-то как раз переименовывать не надо. Дерево здесь не поможет. И вообще, выделение директорий к дереву отношения не имеет. Или я чего-то не понял? _________________ Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон) |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 30, 2010 21:25 Post subject: |
|
|
Flasher, нужна не сквозная нумерация, а "в каждой папке нумерация файлов должна быть 01,02,03..."
Last edited by Tol!k on Sun May 30, 2010 21:27; edited 1 time in total |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 30, 2010 21:25 Post subject: |
|
|
Что-то меня и правда не туда понесло. Ctrl+Shift+B в дереве всё равно не сработает по понятным причинам, хотя Гислеру бы не мешало предложить, чтобы по некой команде, например, cm_DirBranchTreeSel и по клавише Ctrl+Alt+B все файлы из выделенных папок выводились в другой панели.
Жаль, что папок так много, в строке поиска не поместятся. Но на всякий предлагаю выделить в дереве папки, сохранить выделение в файл, а потом либо Batya, либо Tol'k свояют скрипт, тем более, что на форуме списки обрабатывались ими не единожды. Например, тут, тут, где-то ещё есть.. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 30, 2010 21:52 Post subject: |
|
|
О, так всё ж уже написано! Flasher, где ты был раньше, я успел батник написать
deniel87
заменяешь в скрипте
Code: | Const Precision = 2 | и
Code: | ' NewName = G & Delimiter & P & Delimiter & GeneralWord & Delimiter & Num(Counter(PF), Precision) & Ext
NewName = Num(Counter(PF), Precision) & Ext |
жмёшь Ctrl+B, выделяешь файлы;
нажимаешь кнопку и выпиваешь за здоровье Бати |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 30, 2010 22:45 Post subject: |
|
|
Tol!k wrote: | жмёшь Ctrl+B, выделяешь файлы; нажимаешь кнопку | А если вложенность разная, и файлы не из всех подкаталогов надо обрабатывать, то как быть?
Tol!k wrote: | Flasher, где ты был раньше, я успел батник написать | На сколько? На пол секунды? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Sun May 30, 2010 23:00 Post subject: |
|
|
Flasher wrote: | А если вложенность разная, и файлы не из всех подкаталогов надо обрабатывать, то как быть? | В запросе ничего про выборочное переименование, а с разной вложенностью скрипт справляется.
Tol!k wrote: | На пол секунды? | Да я на себя злой, что делал бесполезную работу. Ну ты понял |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun May 30, 2010 23:29 Post subject: |
|
|
Tol!k wrote: | В запросе ничего про выборочное переименование, а с разной вложенностью скрипт справляется. | Пока да, ну вот, допустим, я поставил. Нужно файлы, находящиеся в разных по вложенности подкаталогах, например, выделенные выборочно в дереве, переименовывать с учётом предложенного алгоритма.
Само собой. |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon May 31, 2010 00:00 Post subject: |
|
|
Flasher wrote: | Нужно файлы, находящиеся в разных по вложенности подкаталогах, например, выделенные выборочно в дереве, переименовывать с учётом предложенного алгоритма. | Пробуй
Code: | @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].* остаются без изменения (в отличии от Батиного скрипта)
Last edited by Tol!k on Tue Jun 01, 2010 13:01; edited 3 times in total |
|
Back to top |
|
|
deniel87
Joined: 02 May 2010 Posts: 3
|
(Separately) Posted: Mon May 31, 2010 01:15 Post subject: |
|
|
Спасибо Tol!k второй скрипт самое оно! |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Mon May 31, 2010 13:41 Post subject: |
|
|
Изменение: теперь при работе не создаётся временный файл |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Mon May 31, 2010 14:58 Post subject: |
|
|
Tol!k
Вот и не бесполезная вовсе работа оказалась. Работает чётко! Молоток!
Но вот чего бы ещё хотелось, так это переименования файлов во вложенных на разную глубину подкаталогах, если при этом выделен (помимо всех прочих) только корневой. Сделаешь? |
|
Back to top |
|
|
Tol!k
Joined: 01 Apr 2008 Posts: 1727 Location: Арзамас
|
(Separately) Posted: Tue Jun 01, 2010 13:02 Post subject: |
|
|
+ Доп. параметр /S – переименовывать файлы во вложенных папках |
|
Back to top |
|
|
|