Удаление в 50 каталогах лишних папок, с сохранением файлов

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

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

Аватара пользователя
shveicar
Сообщения: 277
Зарегистрирован: Пн апр 18, 2011 01:54
Откуда: Россия Москва

Сообщение shveicar »

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

Сообщение Flasher »

С учётом приведённых примеров могу утверждать, что в моём скрипте ругани быть не должно.
Darkenlightener
Сообщения: 19
Зарегистрирован: Сб янв 14, 2012 12:58

Поиск папок, содержащих только 1 непустую папку

Сообщение Darkenlightener »

Здравствуйте!

Обращаюсь к корифеям с довольно нетривиальным вопросом (во всяком случае, поиск по форуму мне не помог).

Я привожу в порядок свою электронную библиотеку, в ней много папок, полученных путем распаковки скачанных архивов. Часто получается так, что в папке находится 1 вложенная папка, а уже в ней лежат файлы и/или папки. Мне приходится вручную копировать файлы и/или папки из вложенной папки в основную, а вложенную (опустевшую) папку удалять. Вопрос: как сделать так, чтобы поиск находил все папки, в которых есть 1 вложенная папка (непустая), но нет файлов на том же уровне вложенности, что и эта папка? Скриншоты приложить не удалось из-за того, что я новичок, поэтому опишу их словами :D :

Папки, содержимое которых меня устраивает — несколько непустых папок или непустые папки + файлы на конкретном уровне вложенности.
Папки, содержимое которых меня не устраивает — только 1 вложенная непустая папка на конкретном уровне вложенности (в ней могут быть папки с файлвми или просто файлы, это непринципиально).

Я пробовал делать это с помощью плагина DirSizeCalc, но не удалось. Подозреваю, что проблему можно решить, если при поиске задать значение одинаковости уровня вложенности для наличия папки и отсутствия файлов, т.е. Ditectory Count = 1 + File Count = 0 + один и тот же уровень вложенности. Однако, насколько я понимаю, сейчас в Тотале при поиске можно задать только уровень вложенности, а это не подходит, поскольку меня интересует не глубина поиска, а уровни, на которых есть непустая папка и нет файлов.

Если кто-нибудь сможет помочь, буду очень благодарен, поскольку проблема для меня довольно насущная.

[mod="Avada"]Всё последующее объединено с текущей темой с учётом близости поставленных задач.[/mod]
Последний раз редактировалось Darkenlightener Сб янв 14, 2012 14:24, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Глубину вложенности можно задавать в filex.
Хотя это не поможет, проще один из имеющихся скриптов перемещения на уровень вверх подлатать.
Аватара пользователя
Avada
Сообщения: 10541
Зарегистрирован: Пт авг 01, 2008 16:17
Откуда: Россия, Саратов

Сообщение Avada »

Darkenlightener
В рамках функциональности известных мне плагинов задача, ИМХО, не решается. Слишком много граничных условий, между которыми не удаётся выстроить нужную взаимосвязь.
Flasher писал(а):Хотя это не поможет, проще один из имеющихся скриптов перемещения на уровень вверх подлатать.
Именно так.

И вообще это тема не для "Общих вопросов". Переношу в "Автоматизацию".
Даже самая богатая фантазия
Не представит себе наши безобразия.
Darkenlightener
Сообщения: 19
Зарегистрирован: Сб янв 14, 2012 12:58

Сообщение Darkenlightener »

Flasher
Вот именно, глубина вложенности меня здесь вообще не интересует.

Avada
Мне надо, чтобы поиск осуществлялся в пределах каждого уровня и они между собой не смешивались при поиске, т.е. проверяется первый уровень на Ditectory Count = 1 + File Count = 0, потом второй (первый при этом не трогаем), третий (первый и второй пропускаем), как-то так. Вот, в принципе, и вся взаимосвязь, по-моему, не так уж много условий :D

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

Сообщение Flasher »

Darkenlightener писал(а):чтобы поиск осуществлялся в пределах каждого уровня и они между собой не смешивались при поиске
А какой смысл в рекурсивном нахождении папок, если требуется перемещать наверх содержимое одиноких подкаталогов первого уровня? Это же каша получится, а не полноценные распакованные "образы". Или есть уверенность, что в структуре имеющихся папок с рядом лежащими файлами нет одиноких подкаталогов без близлежащих файлов?
Darkenlightener
Сообщения: 19
Зарегистрирован: Сб янв 14, 2012 12:58

Сообщение Darkenlightener »

Flasher
Честно говоря, идею вообще не уловил(( Рекурсию я себе слабо представляю))

Если говорить о том, что мне нужно в идеале, то надо, чтобы в каждой папке на любом уровне были или непустые папки + файлы или только файлы. Как это по-научному будет, не знаю, к сожалению. "Нутром чувствую, что литр, а как математически выразить — не знаю!" (с) :lol:

В идеале хотелось бы добиваться этого автоматически, но если это слишком сложно, то хотя бы находить папки только с 1 вложенной папкой на каждом уровне, чтобы потом вручную их обрабатывать.

Если непонятно, откуда у меня берутся такие папки, объясняю, что они получаются при массовой распаковке rar и zip архивов по принципу "извлечь каждый архив в отдельную папку". Если в архив упакована одна папка, то на выходе получается папка\папка\файлы вместо нужного мне папка\файлы
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Darkenlightener
Никакой новой информации. Я вообще-то вопросы задал, а не идеей поделился.
Рекурсивный поиск - это поиск без ограничений глубины.
Я пишу о том, что в любой такой папке, воссозданной из распакованного архива могут находиться на последующих глубинах одиночные папки без файлов рядом. А дальше отвечаем на мой вопрос.
Автоматизировать можно только исходя из ответа на него.
Darkenlightener
Сообщения: 19
Зарегистрирован: Сб янв 14, 2012 12:58

Сообщение Darkenlightener »

Flasher писал(а):Никакой новой информации. Я вообще-то вопросы задал, а не идеей поделился.
Я просто вопрос не понял, потому так ответил :D
Flasher писал(а): Я пишу о том, что в любой такой папке, воссозданной из распакованного архива могут находиться на последующих глубинах одиночные папки без файлов рядом.
Их тоже надо найти. Надо найти все такие папки на всех уровнях и стянуть наверх до вида папка\папка+папка+(...)+папка+файлы или папка\папка+папка+(...)+папка. Или, хотя бы, просто найти. Все вложенные папки должны выглядеть так же. Это ответ на вопрос?
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Darkenlightener писал(а):Это ответ на вопрос?
Нет. Я вообще не понял логику записи. Исходна цель - перемещение + удаление опустошаемых папок, а не поиск, так? Зачем искать на любой глубине, если это не стыкуется с исходной целью?
Darkenlightener
Сообщения: 19
Зарегистрирован: Сб янв 14, 2012 12:58

Сообщение Darkenlightener »

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

Сообщение Flasher »

Darkenlightener писал(а):я не предполагал, что еще и перемещать можно автоматически
А это ни о чём не говорит?:
Flasher писал(а):проще один из имеющихся скриптов перемещения на уровень вверх подлатать
Я вижу пока следующие пути решения вопроса:
1) Поскольку при распаковке имя директории соответвует базовому имени архива, можно сравнивать её имя с именем находящейся внутри неё директории, допустим, по каким-то первым символам, и если они совпадают, то содержимое должно перемещаться наверх. Тут же можно проверять наличии файлов с определённым расширением.
2) Распаковать все архивы заново с присвоением одинакового комментария папкам. По тому комментарию отслеживать папки с вышеописанными условиями и перемещать.
3) Организовать поиск через Script Content Plugin, самостоятельно проверить найденные по заданному изначально критерию папки, потом воспользоваться скриптом автоперемещения.
4) Воспользоваться обычным поиском папок с заданной глубиной расположения этих распакованных директорий. Задача скрипта будет выделить нужные папки для самостоятельной проверки на пригодность для последующего перемещения наверх.

Что лучше?
Последний раз редактировалось Flasher Сб янв 14, 2012 17:40, всего редактировалось 1 раз.
Аватара пользователя
Tol!k
Сообщения: 1727
Зарегистрирован: Вт апр 01, 2008 20:02
Откуда: Арзамас

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

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

@echo off &chcp 1251 >nul &setlocal enableextensions
rem Список папок "только 1 папка и 0 файлов на первом уровне вложенности"

set "list=_1.lst"

>"%list%" echo.
for /d /r %%d in (*) do (
	dir "%%d" |find "0 файлов              0 байт" >nul &&for /f %%c in (
		'dir "%%d" ^|find /c "<DIR>"'
	) do if "%%c"=="3" >>"%list%" echo %%d
)
Последний раз редактировалось Tol!k Сб янв 14, 2012 17:35, всего редактировалось 1 раз.
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Tol!k
Список - это неинтересно..
Ответить