1

Тема: CMD/BAT: удаление всех подкаталогов из определённого каталога

Если требуется удалить все подкаталоги из определённого каталога, не удаляя сам каталог:

for /d %%i in ("d:\test\*") do rmdir /s /q "%%i"

Или:

for /f "delims=" %%i in ('dir "d:\test" /a:d /b') do rmdir /s /q "d:\test\%%i"

Первая команда не видит скрытые папки.
Примеры даны для командных файлов, при вызове из командной строки надо писать %i вместо %%i.
Автор примеров - wisgest.

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

2 (изменено: -red-, 2009-02-17 10:51:23)

Re: CMD/BAT: удаление всех подкаталогов из определённого каталога

Пример BAT файла, удаляющего в текущем каталоге и рекурсивно в его подкаталогах, каталог с именем ".svn", а потом удаляющий сам себя.

@echo off
rem unsvn.bat
setlocal
rem rdir=название_удаляемых_каталогов
set rdir=.svn
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
rem Удалить самого себя:
del /Q /F %fpath%%~nx0

PS: Используется для создания пакета исходников без ссылок на SVN сервер.

3

Re: CMD/BAT: удаление всех подкаталогов из определённого каталога

Пакетный файл «ClearFolder.cmd» очищает папку, указанную параметром, от всех файлов и подпапок (в том числе и вложенных), независимо от их атрибутов (hidden, system, read-only).

ClearFolder.cmd

@echo off
setlocal enableextensions enabledelayedexpansion

if exist "%~1" (
    echo Clearing folders in [%~1].
    pushd "%~1" && (rmdir /s /q "%~1" & popd) 2>nul
) else (
    echo Not found [%~1]
)

endlocal
exit /b 0

Примеры использования:

ClearFolder.cmd "c:\work"
ClearFolder.cmd "%Temp%"

Автор идеи — DStar, адаптация — alexii.

4

Re: CMD/BAT: удаление всех подкаталогов из определённого каталога

Чтобы удалить каталог вместе со всем содержимым(файлами и подкаталогами), можно использовать функцию DelNodeRunDLL32 из advpack.dll:

@echo off
echo Press anykey to continue, press Ctrl+C to cancel...
pause
rundll32.exe advpack.dll,DelNodeRunDLL32 %1
echo [%1] has been deleted

...либо программку DELTREE.EXE, которая входит в состав MSDOS начиная с 6.0:

@echo off
echo Press anykey to continue, press Ctrl+C to cancel...
pause
DELTREE.EXE /y %1
echo ready

Чтобы очистить каталог от файлов и вложенных подкаталогов можно использовать такую команду:

@echo off
echo Press anykey to continue, press Ctrl+C to cancel...
pause
DELTREE.EXE /y %1\*.*
echo ready

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