Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление всех папок с одним именем на всех дисках (http://forum.oszone.net/showthread.php?t=154209)

volk1234 23-10-2009 23:35 1250853

Удаление всех папок с одним именем на всех дисках
 
Привет!

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

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

Petya V4sechkin 24-10-2009 09:24 1251011

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 для тестирования (чтобы видеть результат).

volk1234 24-10-2009 11:50 1251108

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

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

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

volk1234 26-10-2009 03:52 1252491

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

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

amel27 26-10-2009 11:32 1252651

есть еще вариант через 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"


Petya V4sechkin 26-10-2009 13:51 1252794

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

volk1234 29-10-2009 13:25 1255551

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

amel27 30-10-2009 12:41 1256517

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

gora 30-10-2009 12:51 1256527

Цитата:

Цитата amel27
а если они все на экран не влезут?.. »

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

volk1234 30-10-2009 13:07 1256541

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

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

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

amel27 30-10-2009 14:09 1256610

на базе первого варианта:
Код:

@Echo Off
SetLocal EnableExtensions

Set F=XXX
Set T=%~dpn0.tmp

If Exist "%T%" DEL /F/Q "%T%"
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 %%I
      Echo %%I>>"%T%"
    )
  )
)
If Not Exist "%T%" Echo Каталогов не обнаружено.& Exit
For /F %%i In ('TYPE "%T%"^|Find /C /V ""') Do Set C=%%i
Echo Найдено %C% каталогов...

:D_LOOP
Set /P D=Просмотреть список найденных еще раз? (Y/N)
If /I Not "%D%"=="Y" If /I Not "%D%"=="N" GoTo D_LOOP
If /I "%D%"=="N" GoTo R_LOOP
MORE "%T%"& GoTo D_LOOP

:R_LOOP
Set /P R=Удалить все найденные каталоги? (Y/N)
If /I Not "%R%"=="Y" If /I Not "%R%"=="N" GoTo R_LOOP
If /I "%R%"=="N" Exit

For /F "UseBackQ Delims=" %%i In ("%T%") Do RD /S/Q "%%i"


volk1234 01-11-2009 09:51 1258042

Код:

If Not Exist "%T%" Echo Каталогов не обнаружено.& Exit
Вот здесь не очень удачно реализовано,
надпись не успеваешь увидеть. Может пинг какой всобачить?

gora 01-11-2009 11:17 1258092

Цитата:

Цитата volk1234
Может пинг какой всобачить? »

Возможные варианты:
Код:

rem остановка скрипта
If Not Exist "%T%" Echo Каталогов не обнаружено.& Pause>Nul& Exit

rem пауза на 5 с
If Not Exist "%T%" Echo Каталогов не обнаружено.& ping -n 6 localhost>Nul& Exit

rem подача звукового сигнала + задержка (каждый BEEP ~ 0.5 с) Код BEEP = 07H
If Not Exist "%T%" Echo Каталогов не обнаружено.& Exit


PFMAX 13-11-2009 00:27 1268904

Как удалить папку со всеми вложенными файлами (без подтверждения на удаление) ? XPSP-3
пример бы

amel27 13-11-2009 01:37 1268936

PFMAX,
Код:

RD /S /Q "C:\TEST"

Ctrec 13-11-2009 02:13 1268943

PFMAX,

Код:

set dir=C:\test
pushd %dir%
if not errorlevel 1 rd /s /q . >nul 2>nul
popd
rd %dir% :: Если надо удалить папку...

Как то так...


Время: 04:05.

Время: 04:05.
© OSzone.net 2001-