PDA

Показать полную графическую версию : [решено] Удаление пустых каталогов через CMD


toro
26-02-2010, 17:37
Помогите с написанием cmd-файла. ОС WIN 2000, XP.
В определённом каталоге есть файлы и вложенные папки, некоторые пусты, некоторые нет. Например каталог D:\1 содержит подкаталоги 2, 3, 4, 5, 6 и файлы 111.txt, 222.txt
Каталоги 3,5,7 пустые. CMD-файл должен удалить только каталоги 3,5,7.
Кол-во подкаталогов и их имена могут быть самые разные. Подкаталог может быть либо пустой либо содержать только файлы (не папки! т.е. глубина вложения папок фиксированная).

seriych
26-02-2010, 18:46
toro,
for /d %%i in ("D:\1\*") do rd /q %%i
вместо D:\1 вставляешь путь к твоей папке.
Использовано то, что глубина фиксирована и команда rd удаляет только пустые папки (папки с файлами и файлы не трогает), если ее использовать без ключа /s.
PS. Почему-то не удаляет каталог Новая папка.

El Sanchez
26-02-2010, 19:39
Почему-то не удаляет каталог Новая папка »
seriych, надо так:

for /d %%i in ("D:\1\*") do rd /q "%%i" 2>nul

toro
26-02-2010, 22:24
команда rd удаляет только пустые папки (папки с файлами и файлы не трогает), если ее использовать без ключа /s » Понятно. Честно говоря не знал. С rd ознакомился через /? а там про пустые каталоги не слова.

for /d %%i in ("D:\1\*") do rd /q "%%i" 2>nul » Если не сложно, объясните почему "%%i" в кавычках и почему 2>nul

seriych
26-02-2010, 23:45
объясните почему "%%i" в кавычках и почему 2>nul »
%%i заменяется на полный путь. В нем могут быть пробелы, поэтому нужны кавычки.
Конструкция 2>nul означает, что сообщения об ошибках (стандартный поток stderr) перенаправляются в nul (то есть, скрываются). Иначе команда Dir выдавала бы ошибку "Файл не найден" при отсутствии файлов.
Просто >nul перенаправляет обычные сообщения (stdout) в nul.
Комбинация 2>nul >nul - полностью "тихий" режим (убирает и stdout, и stderr). »

toro
01-03-2010, 23:04
Спасибо. Всё предельно понятно.

jokerbleck
20-02-2012, 05:49
for /d %%i in ("D:\1\*") do rd /q "%%i" 2>nul »
Хм... на сколько я понял, глубина определяется "D:\1\*". А если глубина не известна...?

Raf-9600
26-01-2014, 18:43
А если глубина не известна...? »
Тогда вот так - http://www.cyberforum.ru/cmd-bat/thread331197.html#post1831467

P.S.
Знаю что тема древняя, однако возможно ответ кому-то пригодиться.

tonmy
26-01-2016, 01:56
----------------------------------------------------------------------------------------
CleanUpTempUserFolder.bat ---- run for Admin permitions
----------------------------------------------------------------------------------------
cd /D "C:\DOCUME~1" && del /s /ah desktop.ini
FOR /F %%i in ('dir /AD /B "C:\Documents and Settings"') do (
del /f /s /q "C:\DOCUME~1\%%i\LOCALS~1\Temp\*.*"
FOR /F "tokens=1,2* delims= " %%a in ('dir /B /S "C:\DOCUME~1\%%i\LOCALS~1\Temp"') do rd /q "%%a %%b"
FOR /F "tokens=1,2* delims= " %%a in ('dir /AD /B /S "C:\DOCUME~1\%%i\LOCALS~1\Tempor~1"') do rd /q "%%a %%b"
)

alpap
26-01-2016, 14:32
Удалит с проверяемой вниз при любой глубине все папки в которых нет файлов:

@echo off
set "in=%Userprofile%\Desktop\papka"
for /r "%in%" %%i in (.) do dir /b "%%~i" | find /v "">nul || rd /s /q "%%~i"
exit
.

Celsus
08-12-2022, 09:53
Вместо пути к папки можно использовать
%CD%
если нужно удалить все папки в текущей папке (в которой лежит скрипт)

megaloman
08-12-2022, 12:35
Celsus, Теме 12 лет и решена она многократно куда более эффективно@Echo Off
cls
Set "Folder=Z:\Test"
FOR /F "usebackq delims=" %%i In (`2^>nul Dir "%Folder%" /S /B /A:D^|Sort /R`) DO >nul 2>&1 Rd "%%i"
Pause
Exit /B




© OSzone.net 2001-2012