Удаление всех папок с одним именем на всех дисках
Привет!
Задача: Программа создает в случайных местах (предсказать нельзя) папку 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 для тестирования (чтобы видеть результат).
|
Вот блин, с циклами у меня всегда была проблемма.
Насколько я понял последний скрипт убьет папку Folder1 (вместо XXX, чтобы понятнее) например только в корне диска ??
А надо и во вложенных папках. Основная проблема именно в поиске и удалении папки, например, Folder1
в любом месте в любой папке. Например в F:\temp\market\dom\folder1
зы. Или ключ dir /s позволяет добится отображения всех подпапок ? Тогда класс...
|
Отчет об использовании полученной информации :)
читать дальше »
http://forum.ru-board.com/topic.cgi?forum=5&topic=21013&start=2000#21
Копирайт поставил Petya V4sechkin ;)
|
есть еще вариант через 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, а вообще, опасно это - вот так папку везде удалять.
|
Да. Надо наверное доработать скрипт - сначала вывод найденых папок - а потом запрос на удаление.....
Кто возьмется :) ?
Я никак не могу взяться за изучение справки по команде For - для меня темный лес....
|
volk1234, а если они все на экран не влезут?..
если в RD убрать ключ /Q, то будет спрашивать для каждой папки
|
Цитата:
Цитата amel27
а если они все на экран не влезут?.. »
|
Вывести их в текстовый файл_список, открыть его в Блокноте для просмотра и редактирование и приостановить работу скрипта паузой. После просмотра, редактирования, сохранения файл_списка (если это потребуется) и закрытия блокнота, продолжить работу скрипта, нажатием любой кнопки в окне консоли, и грохнуть все папки согласно файл_списку! :)
Вместо паузы можно предусмотреть выбор вариантов "Грохнуть - Выход".
|
Вообще я сильно сомневаюсь что таких папок будет больше 200-300, по умолчанию буфер cmd = 300 строк.
Даже в большом количестве папок можно разглядеть - что конкретную папку удялять не надо - ответить нет - переименовать нужные папки и снова запустить скрипт.
Loginvovchik развил бурную деятельность, черт меня дернул сказать ему про скрипт
http://community.acdsee.com/forums/t...ders-originals
|
на базе первого варианта:
Код:
@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"
|
Код:
If Not Exist "%T%" Echo Каталогов не обнаружено.& Exit
Вот здесь не очень удачно реализовано,
надпись не успеваешь увидеть. Может пинг какой всобачить?
|
Цитата:
Цитата 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
|
Как удалить папку со всеми вложенными файлами (без подтверждения на удаление) ? XPSP-3
пример бы
|
PFMAX,
Код:
set dir=C:\test
pushd %dir%
if not errorlevel 1 rd /s /q . >nul 2>nul
popd
rd %dir% :: Если надо удалить папку...
Как то так...
|
Время: 04:05.
© OSzone.net 2001-