Переименование папок по именам PSD-файлов в них

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

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

Ответить
Xunya
Сообщения: 2
Зарегистрирован: Пн окт 24, 2016 05:23

Переименование папок по именам PSD-файлов в них

Сообщение Xunya »

С TotalCommander я на "вы", потому обычно им не пользуюсь. Но встала весьма непростая (для меня) задача. Может, на этом форуме кто подскажет решение. :roll:
Есть несколько сотен папок с бессмысленными названиями (типа: 54fs362dr) в каждой папке по несколько файлов, файлы разные, но обязательно в каждой папке присутствует файл с одним и тем же расширением (*.psd).
Собственно вопрос: можно ли средствами ТК переименовать каждую папку именем в ней находящегося файла psd? Файлы psd в каждой папке имеют разные имена.
Я искала ответ на свой вопрос в инете, даже качала всякие программы Renamer'ы, но такой функции нигде не нашла.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Xunya
Тем с заглавием "Групповое переименование" здесь на разных подфорумах уже, мягко говоря, не одна и не две, о недопустимости их дальнейшегно размножения тут предупреждали неоднократно.
Для начала — замечание за нарушение правил форума и переименование темы в нечто более содержательное. Решение по переносу будет принято по результатам обсуждения.
Если в каждой папке действительно ровно по одному PSD-файлу, можно, например, вывести на панель после поиска по маске все PSD-файлы в заданном массиве папок, скопировать имена этих файлов в буфер, после чего в текстовом редакторе поменять .PSD на <пусто>, а сохранённый файл-список загрузить в инструменте группового переименования теперь уже для собранных в результатах поиска имён папок, отсортированных в том же порядке и в том же количестве, что раньше PSD-файлы.
Даже самая богатая фантазия
Не представит себе наши безобразия.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Можно одной строчкой в консоли переименовать папки:

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

for /d %d in (*) do for %f in ("%d\*.psd") do ren "%d" "%~nf"
Сначала надо сделать перейти в папку с подпапками с PSD-файлами, потом открыть консоль через меню Команды и вставить туда эту строчку.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

MVV
Попробовал в XP. Перешёл, открыл, вставил. "Процесс не может получить доступ к файлу, так как этот файл занят другим процессом".
Даже самая богатая фантазия
Не представит себе наши безобразия.
Xunya
Сообщения: 2
Зарегистрирован: Пн окт 24, 2016 05:23

Сообщение Xunya »

Извините пожалуйста, Avada, за невольное нарушение правил. Впредь постараюсь быть внимательнее.
Спасибо за приведенные способы, я решила попробовать тот, что быстрее, вставила код в консоль и все получилось! Больше спасибо, MVV!!! Все получилось!!!! И все так быстро решилось, одной лишь строчкой, а я ведь мучилась с этой проблемой так долго!

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

Сообщение Flasher »

Вообще не пойму, зачем консоль открывать, если можно %comspec% /c спереди дописать и вызывать хоть из кнопки, хоть из комстроки TC?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Flasher,
Так же заклинание короче! :D

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

Сообщение Flasher »

MVV
Интересно, как вызов консоли у тебя вдруг из этого заклинания выпал? :wink:
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

А я могу Shift+Enter сделать в консоли тотала, и на фиг не надо %ComSpec%. :D
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

В комстроке, а не консоли. Можно и так. И это уже всяко не меню "Команды".
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

Flasher писал(а):вызов консоли ... из этого заклинания выпал
Надо же что-то и для TC оставить :).

MVV
Хорошо, что задача решена, но
1) на XP у меня , как и у Avada, почему-то строка не работает,
2) рекурсия, наверное, не предусмотрена (то есть в текущем каталоге переименуются только подпапки первого уровня)?
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

В этом варианте рекурсия не поддерживается - но она и не запрашивалась.

А на XP и правда не работает. Возможно, команда for читает файлы из директории в процессе обработки, а не предварительно.


На XP у меня работает такой вариант (заодно с рекурсией):

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

for /f "delims=" %f in ('dir /s /b *.psd') do @ren "%~pf" "%~nf"
Или то же самое с usebackq (я всегда пишу usebackq, т.к. так нет проблем с прямым перечислением имён файлов в кавычках):

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

for /f "usebackq delims=" %f in (`dir /s /b *.psd`) do @ren "%~pf" "%~nf"
Но нужно иметь в виду, что если PSD есть и в папке, и в подпапке, то подпапка скорее всего не переименуется, т.к. верхняя папка будет переименована ранее. Впрочем, повторный вызов команды переименует уже вложенную папку.

Ещё есть вариант сначала выдать список путей файлов во временный файл и потом второй командой пройтись по нему.
sa
Сообщения: 2758
Зарегистрирован: Ср апр 29, 2009 18:56

Сообщение sa »

MVV писал(а):но она и не запрашивалась
Но она (рекурсия) и не отрицалась.
MVV писал(а):работает такой вариант (заодно с рекурсией)
Теперь тоже работает, но, как верно замечено, без рекурсии, если PSD есть и в папке, и в подпапке. Потребуется некоторое число повторных вызовов, зависящее от глубины иерархии.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Повторы - это плохо. Логичней было бы смотреть сразу в каждый переименованный каталог или начинать от дальней глубины до корневой, т.е. в обратном направлении. Но для таких штук уже нормальный скрипт нужен.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

sa писал(а):Теперь тоже работает, но, как верно замечено, без рекурсии
Всё же рекурсия есть - вложенные папки в принципе обрабатываются, и повторный запуск не понадобится, если во вложенных друг в друга папках нет PSD-файлов.

А чтобы избежать повторных запусков, надо придумать, как обработать список в обратном порядке. :)
Ответить