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

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

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

Аватара для volk1234

Старовер


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


Конфигурация

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


Изменения
Автор: volk1234
Дата: 24-10-2009
Привет!

Задача: Программа создает в случайных местах (предсказать нельзя) папку XXX.
То есть папок может быть от 1й и до бесконечности в любой папке, где работал с файлами.
Задача написать скрипт который удалял бы при запуске ВСЕ папки XXX
где бы они не были.

Как организовать правильно перебор и удаление всех папок ?

-------

Ю-ху!


Отправлено: 23:35, 23-10-2009

 


Moderator


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

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


volk1234, если XXX - маска, тогда так:
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions

For %%D In (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (
  For /F "Delims=" %%I In ('Dir %%D:\*XXX* /AD /B /S 2^>nul') Do (
    If Exist "%%I" Echo RD /S /Q "%%I"
  )
)
Если конкретное имя, примерно так:
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions

Set F=XXX
For %%D In (A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) Do (
  For /F "Delims=" %%I In ('Dir %%D:\%F%.* /AD /B /S 2^>nul') Do (
    If Exist "%%I" (
      If /I "%%~nxI"=="%F%" Echo RD /S /Q "%%I"
    )
  )
)
Команда Echo для тестирования (чтобы видеть результат).

Последний раз редактировалось Petya V4sechkin, 24-10-2009 в 10:20. Причина: перебор дисков.

Это сообщение посчитали полезным следующие участники:

Отправлено: 09:24, 24-10-2009 | #2



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

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


Аватара для volk1234

Старовер


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

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


Вот блин, с циклами у меня всегда была проблемма.

Насколько я понял последний скрипт убьет папку Folder1 (вместо XXX, чтобы понятнее) например только в корне диска ??
А надо и во вложенных папках. Основная проблема именно в поиске и удалении папки, например, Folder1
в любом месте в любой папке. Например в F:\temp\market\dom\folder1

зы. Или ключ dir /s позволяет добится отображения всех подпапок ? Тогда класс...

-------

Ю-ху!


Отправлено: 11:50, 24-10-2009 | #3


Аватара для volk1234

Старовер


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

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


Отчет об использовании полученной информации
читать дальше »
http://forum.ru-board.com/topic.cgi?forum=5&topic=21013&start=2000#21

Копирайт поставил Petya V4sechkin

-------

Ю-ху!


Отправлено: 03:52, 26-10-2009 | #4


Googler


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

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


есть еще вариант через WMI:
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions

Set DIR=XXX

For /F "UseBackQ Tokens=2 Delims==" %%i In (
   `WMIC FSDIR Where 'Name LIKE "%%\\%DIR%"' Get Name /Value^|Find "="`
) Do For /F "Delims=" %%a In ('Echo %%i') Do Echo RD /S/Q "%%a"
не вижу смысла в сканировании сетевых или CD дисков, т.к. сильно замедляется работа скрипта, а шары лучше чистить локально на сервере, поэтому можно ограничить... скажем, только локальные (HDD) и сменные (USB):
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

Set DIR=1

For /F "Skip=1 UseBackQ Tokens=1,2" %%i In (
   `WMIC LogicalDisk Where 'DriveType^=2 Or DriveType^=3' GET Name^,SystemName`
) Do If Not "%%j"=="" If Defined $R (
   Set $R=!$R! OR Drive^^^^="%%i"
   ) Else  Set $R=Drive^^="%%i"

If Not Defined $R Exit /B 1

For /F "UseBackQ Tokens=2 Delims==" %%i In (
   `WMIC FSDIR Where '^(%$R%^) And Name LIKE "%%\\%DIR%"' Get Name /Value^|Find "="`
) Do For /F "Delims=" %%a In ('Echo %%i') Do Echo RD /S/Q "%%a"

Последний раз редактировалось amel27, 30-10-2009 в 12:40. Причина: очепятка

Это сообщение посчитали полезным следующие участники:

Отправлено: 11:32, 26-10-2009 | #5



Moderator


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

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


volk1234, а вообще, опасно это - вот так папку везде удалять.

Отправлено: 13:51, 26-10-2009 | #6


Аватара для volk1234

Старовер


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

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


Да. Надо наверное доработать скрипт - сначала вывод найденых папок - а потом запрос на удаление.....
Кто возьмется ?
Я никак не могу взяться за изучение справки по команде For - для меня темный лес....

-------

Ю-ху!


Отправлено: 13:25, 29-10-2009 | #7


Googler


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

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


volk1234, а если они все на экран не влезут?..
если в RD убрать ключ /Q, то будет спрашивать для каждой папки

Отправлено: 12:41, 30-10-2009 | #8


Аватара для gora

Ушёл из жизни


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

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


Цитата amel27:
а если они все на экран не влезут?.. »
Вывести их в текстовый файл_список, открыть его в Блокноте для просмотра и редактирование и приостановить работу скрипта паузой. После просмотра, редактирования, сохранения файл_списка (если это потребуется) и закрытия блокнота, продолжить работу скрипта, нажатием любой кнопки в окне консоли, и грохнуть все папки согласно файл_списку!
Вместо паузы можно предусмотреть выбор вариантов "Грохнуть - Выход".

Отправлено: 12:51, 30-10-2009 | #9


Аватара для volk1234

Старовер


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

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


Вообще я сильно сомневаюсь что таких папок будет больше 200-300, по умолчанию буфер cmd = 300 строк.

Даже в большом количестве папок можно разглядеть - что конкретную папку удялять не надо - ответить нет - переименовать нужные папки и снова запустить скрипт.

Loginvovchik развил бурную деятельность, черт меня дернул сказать ему про скрипт
http://community.acdsee.com/forums/t...ders-originals

-------

Ю-ху!


Отправлено: 13:07, 30-10-2009 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Удаление всех файлов из папки 7human7 Скриптовые языки администрирования Windows 50 07-11-2023 21:39
Интерфейс - [решено] Как поменять иконки папок всех РАЗОМ в Win 7? sputNIK37 Microsoft Windows 7 1 31-08-2012 10:45
Разное - [решено] Как избавиться от $RECYCLE.BIN на всех дисках? Abra Microsoft Windows 7 2 02-12-2009 17:09
Доступ - [решено] Отключение автозапуска на всех дисках GifuN Microsoft Windows 2000/XP 1 14-05-2008 16:37
Удаление всех папок и файлов из папки c:\Temp DIKPro Microsoft Windows NT/2000/2003 10 15-08-2006 16:20




 
Переход