Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS Windows > Автоматизация удаления папок


Автор: DragonFire 29.12.2009, 16:51
Есть каталог, в нем лежит bat файл. Этот bat файл должен пробегатся по всем пложенным каталогам рекурсивно и удалять все папки, которые наз. "obj".
Для файлов *.obj работат такой скрипт:
Код

del .\*.obj /S 

А для папок уже такой не работает:
Код

rd .\obj /S

 smile 

Автор: Akella 29.12.2009, 17:45
Цитата(DragonFire @  29.12.2009,  16:51 Найти цитируемый пост)
такой не работает:

может
Код
rd .\obj /S /Q

Автор: DragonFire 29.12.2009, 18:23
Цитата(Akella @  29.12.2009,  17:45 Найти цитируемый пост)
может

не может....

Автор: chip_and_dayl 29.12.2009, 19:21
Цитата(DragonFire @  29.12.2009,  16:51 Найти цитируемый пост)
del .\*.obj /S 

Это в принципе аналогично этому del *.obj  /s

поэтому можно rd obj /S

Автор: DragonFire 29.12.2009, 19:54
Цитата(chip_and_dayl @  29.12.2009,  19:21 Найти цитируемый пост)
поэтому можно rd obj /S 

И это не можно smile 
Удаляет только в текущей папке подпапку obj... А рекурсивно по вложенным папкам не проходит...

Автор: chip_and_dayl 29.12.2009, 21:39
Код

@echo off
setlocal
rem rdir=название_удаляемых_каталогов
set rdir=obj
rem Раскоментировать чтоб задавать имя удаляемого каталога в строке параметров:
rem set rdir=%1
set fpath=%~dps0
call :func %fpath:~0,-1%
goto end
:func
for /f "delims=" %%i in ('dir %1 /a:d /b') do IF /I %%i==%rdir% ( rmdir /s /q %1\%%i && echo deleted 

%1\%%i ) ELSE ( call :func %1\%%i )
exit /b
:end


Вот нашел. Пока проверял, то себе флешку очистил)  Правда другим кодом. Батник должен быть  в корне папки, где будут очищаться папки

Автор: DragonFire 30.12.2009, 04:02
Ага тоже находил... Только почему-то не работало... Можно реальный пример для папки "obj"?

Автор: chip_and_dayl 30.12.2009, 11:40
Я там сделал под тебя, то есть под папку obj:) Копируешь и запускаешь батник. Лично проверил. 

Он как работает!?! смотрит текущую папку, и начиная с этой папки и подпапках смотрит папку с именем Obj

Добавлено @ 11:46
Как проверял. Создал папку Темп, куда поместил батник этот, в этой же папке Темп есть следующий папки:

Temp\Nb
Temp\Nb\f\obj - содержит текстовой файл
Temp\Nb\obj - пустая папка
Temp\Obj  - который для пущей водицы содержит также файл текстовой
Temp\a.bat - сам батник

После запуска батника, остаются следующий папки с файлами
Temp\Nb
Temp\Nb\f

Добавлено через 7 минут и 59 секунд
Код

set rdir=obj

здесь указываешь имя папки

Автор: DragonFire 30.12.2009, 13:50
А у меня не работает... Корневая папка - DIAR Studio 3:
Код


F:\Job\DIAR Studio 3>setlocal

F:\Job\DIAR Studio 3>rem rdir=эрчтрэшх_єфры хь√ї_ърЄрыюуют

F:\Job\DIAR Studio 3>set rdir=obj

F:\Job\DIAR Studio 3>rem ╨рёъюьхэЄшЁютрЄ№ ўЄюс чрфртрЄ№ шь  єфры хьюую ърЄрыюур
т ёЄЁюъх ярЁрьхЄЁют:

F:\Job\DIAR Studio 3>rem set rdir=

F:\Job\DIAR Studio 3>set fpath=F:\Job\DIAR Studio 3\

F:\Job\DIAR Studio 3>call :func F:\Job\DIAR Studio 3

F:\Job\DIAR Studio 3>for /F "delims=" %i in ('dir F:\Job\DIAR /a:d /b') do IF /I
 %i == obj (
rmdir /s /q F:\Job\DIAR\%i   && echo deleted
 F:\Job\DIAR\%i
)  ELSE (call :func F:\Job\DIAR\%i  )
File Not Found

F:\Job\DIAR Studio 3>exit /b

F:\Job\DIAR Studio 3>goto end

F:\Job\DIAR Studio 3>pause
Press any key to continue . . .

Автор: DragonFire 30.12.2009, 15:44
В общем проблема была в пробелах в названии папки. Вот рабочий скрипт:
Код

echo Deleting Folders
setlocal
set rdir=obj
set fpath=%~dps0
call :func "%fpath:~0,-1%"
goto end
:func
for /f "delims=" %%i in ('dir %1 /a:d /b') do IF /I %%i==%rdir% ( rmdir /s /q %1\%%i && echo Deleted Folder - %1\%%i ) 
ELSE ( call :func %1\"%%i" )
exit /b
:end

Автор: mihanik 30.12.2009, 23:29
А можно и VBS использовать...
Вот так рекурсивно обходятся все подпапки определённой папки...

Код

Set FSO = CreateObject("Scripting.FileSystemObject")
ShowSubfolders FSO.GetFolder("C:\MyFolder")

Sub ShowSubFolders(Folder)
    For Each Subfolder in Folder.SubFolders
        Wscript.Echo Subfolder.Path
        ShowSubFolders Subfolder
    Next
End Sub


А вот так удаляется папка

Код

Set objFSO = CreateObject("Scripting.FileSystemObject")
objFSO.DeleteFolder("C:\MyFolder")



Почему вы так любите батники... VBS намного красивее...

Автор: DragonFire 31.12.2009, 02:24
Угу еще можно написать на c или c++ прогу... Любим потому что правится налету без всяких перекомпиляций. 
Если я что-то не знаю про VBS - поправьте....

Автор: mihanik 31.12.2009, 06:41
Цитата(DragonFire @  31.12.2009,  02:24 Найти цитируемый пост)
Любим потому что правится налету без всяких перекомпиляций


Такая же фигня.
Это интерпретируемый системой язык, который не требует компиляции.
Программа на VBS - это такой же текстовый файл, как и  BAT-файл.


Цитата(DragonFire @  31.12.2009,  02:24 Найти цитируемый пост)
Если я что-то не знаю про VBS - поправьте.... 

С удовольствием...
Только это уже тема для холивара...
 smile 

Автор: DragonFire 31.12.2009, 12:42
mihanik, может быть потому еще используем что привыкли.. =) 
А вообще в семерке power shell скрипты стали модными вроде... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)