Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление папок по совпадению имен

Ответить
Настройки темы
CMD/BAT - [решено] Удаление папок по совпадению имен

Пользователь


Сообщения: 59
Благодарности: 0

Профиль | Отправить PM | Цитировать


Здравствуйте, уважаемые.
Прошу помочь.

Нужен батник, который удаляет в нескольких заранее определенных директориях только те папки, чьи имена совпадают с именами папок, выделенных в Проводнике в произвольной директории.
Пути к директориям, где требуется производить удаления, указываются в батнике. Их может быть несколько, обычно менее десяти.
Сам батник будет добавлен в контекстное меню Проводника, откуда и будет запускаться.
Произвольной директорией, где выделяются папки и запускается батник, может быть и одна из указанных в батнике директорий.

Пример

Есть три директории:
C:\Folder1
C:\Folder2
C:\Folder3\Subfolder
Первая - произвольная, из которой будет вызываться батник через контекстное меню Проводника.
Вторая и третья - заранее определенные, в которых требуется производить удаления. Пути к ним прописываются в батник через set.

В Проводнике в первой (произвольной) директории C:\Folder1 выделяем мышью-клавиатурой несколько интересующих папок:
C:\Folder1\Март
C:\Folder1\Август
C:\Folder1\Сентябрь
C:\Folder1\Октябрь
C:\Folder1\Декабрь

Вызываем контекстное меню Проводника, и активируем через него батник. (его путь и параметр добавлены в контекстное меню).

Батник ищет во второй и третьей директориях папки, имена которых совпадают с именами папок, выделенных в первой директории - Март, Август, Сентябрь, Октябрь, Декабрь - и удаляет их. Например, нашел и удалил:
C:\Folder2\Март
C:\Folder2\Октябрь
C:\Folder2\Декабрь
C:\Folder3\Subfolder\Март
C:\Folder3\Subfolder\Август
C:\Folder3\Subfolder\Сентябрь
C:\Folder3\Subfolder\Октябрь



Отправлено: 15:46, 15-05-2019

 

Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


Хотите сказать это удобно, именно так? Насколько часто надо делать это удаление? Может проще задать пути параметром или вопросом и поручить планировщику задачу?
И для чего вообще возиться с подпапками, не проще сразу удалять все пустые ниже или на этом уровне или непустые но начиная с родительской известной?

Отправлено: 14:43, 16-05-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 59
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата alpap:
Хотите сказать это удобно, именно так? »
К сожалению, других вариантов нет, поскольку сегодня это одни папки, завтра другие, их имена и пути не известны заранее, а необходимость их удаления нельзя определить какими-либо техническими свойствами. Можно только задать путь к тем родительским директориям, в которых надо периодически удалять некоторые подпапки, имена которых не известы заранее. А вот родительские папки и пути к ним известны, и изменяются редко.
Цитата alpap:
Насколько часто надо делать это удаление? »
Каждый день по 10-15 названий папок под удаление, иногда больше. Соответственно, надо это умножить на количество родительских папок, в которых надо найти и удалить подпапки с такими именами. Это отнимает массу времени и угнетает.
Цитата alpap:
Может проще задать пути параметром или вопросом и поручить планировщику задачу? »
Пути можно задать только для родительских директорий, где требуется искать папки для удаления. Организовать удаление по маске не получится, поскольку названия непредсказуемы. И поручить удаление планировщику тоже нельзя. Слишком антропогенные критерии - что, когда и почему надо удалять. Но имеет смысл автоматизировать само удаление описанным выше способом.
Цитата alpap:
И для чего вообще возиться с подпапками, не проще сразу удалять все пустые ниже или на этом уровне или непустые но начиная с родительской известной? »
Я бы и не подумал организовывать простую чистку пустых папок таким сложным способом.
Родительские папки содержат массу непустых подпапок, в которых тоже что-то находится. Удалять родительские папки нельзя. А также, нельзя (даже временно) переименовывать и перемещать подпапки. Можно только удалить некоторые из них. Но при этом, если в одной родительской директории одна какая-то папка удаляется, то обязательно удалять ВСЕ подпапки с тем же названием и в других родительских директориях. Если они там есть.

Отправлено: 17:03, 16-05-2019 | #3


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


NuclearBox, так как вы хотите (из контекстного меню выделять) не выйдет, можно выделенное передать в файл-список и потом придется еще запускать bat где будет сравнение содержимого заданных путей с этим списком. Иначе, если выделенное отдать сразу параметром для bat (прописать в конт. меню), то будет запускаться столько окон bat, сколько путей было выделено.
Я не просто так написал выше, что это будет неудобно так как вы хотите.

Отправлено: 03:25, 17-05-2019 | #4


Пользователь


Сообщения: 59
Благодарности: 0

Профиль | Отправить PM | Цитировать


alpap, спасибо за ответ.
Цитата alpap:
если выделенное отдать сразу параметром для bat (прописать в конт. меню), то будет запускаться столько окон bat, сколько путей было выделено »
Я понимаю, это вполне меня устроит. Имею в контекстном меню несколько батников для переименований и другого.
По текущей задаче, при 10-15 наименований под удаление в день, которые редко удаляются сразу все, а обычно за 2-3 раза в течение дня - это нормально. Даже если бы пришлось по одному названию удалять, а не скакать между окнами с поиском - уже было бы легче. Но целесообразно сразу сделать удаление пакетами (несколькими bat-окнами) - машину это не напряжет.
Цитата alpap:
можно выделенное передать в файл-список и потом придется еще запускать bat где будет сравнение содержимого заданных путей с этим списком »
Я предполагал, что можно обойтись без сравнения путей, а только извлекать имена выделенных папок и добавлять их к путям заданных родительских папок. И в таком виде отправлять на удаление без сравнения. Не важно есть ли такая папка. Если есть - она будет удалена. Если нет - команда все равно пройдет к следующей.

Как примерно представлял себе конструкцию батника:

1 - задать через set пути к родительским папкам, где нужны удаления. Согласно примеру:
Set "FolderA=C:\Folder2"
Set "FolderB=C:\Folder3\Subfolder"
2 - для выделенных папок (for) прописать через do set замену путей каждой папки на путь вида "FolderA\папка", и через call отправить на удаление этого пути.
3 - аналогично, для выделенных папок прописать замену пути каждой папки на путь вида "FolderB\папка", и отправить на удаление.
4 - удаление выделить с помощью метки.

alpap, однако, если я ошибаюсь, и такая конструкция неработоспособна, то можно было бы основным батником не просто генерировать пути для списка удаления, а формировать строки нового временного батника, состоящие из команды удаления и сгенерированных путей, и выводить в новый батник >> temp.bat
По примеру такого вида:
call del "C:\Folder2\Март"
call del "C:\Folder2\Октябрь"
call del "C:\Folder2\Декабрь"
call del "C:\Folder3\Subfolder\Март"
call del "C:\Folder3\Subfolder\Август"
call del "C:\Folder3\Subfolder\Сентябрь"
call del "C:\Folder3\Subfolder\Октябрь"
Это решит проблему нагрузки и количества окон bat, и сюда же можно дописать удаление этого временного батника:
call del "temp.bat"

Хотелось бы обойтись одним постояным bat-файлом. Однако, навыков все равно не хватает ни для первого, ни для второго варианта.



Последний раз редактировалось NuclearBox, 17-05-2019 в 12:12.


Отправлено: 11:51, 17-05-2019 | #5


Ветеран


Сообщения: 1274
Благодарности: 564

Профиль | Отправить PM | Цитировать


ну если несколько окон устраивает, то можно сделать так:
применить этот reg
Скрытый текст

Код: Выделить весь код
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\shell\Remsim]
"MUIVerb"="Удалить подобные"

[HKEY_CLASSES_ROOT\Directory\shell\Remsim\command]
@="\"C:\\Bat\\Remsim.bat\" \"%1\""

Remsim.reg
-------------------------------------------
Remsim.bat (у меня лежал в "C:\Bat")
Код: Выделить весь код
@echo off
set "d1=C:\Folder2"
set "d2=C:\Folder3\Subfolder"

for %%a in ("%d1%" "%d2%") do if exist "%%~a\%~nx1" >nul 2>&1 rd /s /q "%%~a\%~nx1"
pause
принцип работы на скриншотах ниже
1, 2, 3
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:07, 17-05-2019 | #6


Пользователь


Сообщения: 59
Благодарности: 0

Профиль | Отправить PM | Цитировать


alpap, большое спасибо! Это то, что надо! Даже reg и иллюстрации бонусом)
Легко увеличил количество папок до нужного. Отлично работает! Спасибо!

Отправлено: 16:54, 17-05-2019 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Удаление папок по совпадению имен

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Удаление файлов и папок по имени ilfaty Скриптовые языки администрирования Windows 9 04-11-2016 10:49
VBS/WSH/JS - Найти ярлык по частичному совпадению csp Скриптовые языки администрирования Windows 2 29-03-2015 22:16
CMD/BAT - Удаление скрытых папок по маске chatlaninsan Скриптовые языки администрирования Windows 5 07-09-2009 17:22
CMD/BAT - [решено] Удаление папок по критериям jentoso Скриптовые языки администрирования Windows 16 17-06-2009 11:38
Интерфейс - Притормаживает скролл и вопрос по отображению имен файлов и папок. The_Crystal Microsoft Windows 7 0 06-05-2009 21:07




 
Переход