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

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

toro 26-02-2010 17:37 1356644

Удаление пустых каталогов через CMD
 
Помогите с написанием 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 1356684

toro,
Код:

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

El Sanchez 26-02-2010 19:39 1356727

Цитата:

Цитата seriych
Почему-то не удаляет каталог Новая папка »

seriych, надо так:
Код:

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

toro 26-02-2010 22:24 1356899

Цитата:

Цитата seriych
команда rd удаляет только пустые папки (папки с файлами и файлы не трогает), если ее использовать без ключа /s »

Понятно. Честно говоря не знал. С rd ознакомился через /? а там про пустые каталоги не слова.

Цитата:

Цитата El Sanchez
Код:

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

Если не сложно, объясните почему "%%i" в кавычках и почему 2>nul

seriych 26-02-2010 23:45 1356967

Цитата:

Цитата toro
объясните почему "%%i" в кавычках и почему 2>nul »

%%i заменяется на полный путь. В нем могут быть пробелы, поэтому нужны кавычки.
Цитата:

Цитата Petya V4sechkin
Конструкция 2>nul означает, что сообщения об ошибках (стандартный поток stderr) перенаправляются в nul (то есть, скрываются). Иначе команда Dir выдавала бы ошибку "Файл не найден" при отсутствии файлов.
Просто >nul перенаправляет обычные сообщения (stdout) в nul.
Комбинация 2>nul >nul - полностью "тихий" режим (убирает и stdout, и stderr). »


toro 01-03-2010 23:04 1359167

Спасибо. Всё предельно понятно.

jokerbleck 20-02-2012 05:49 1862494

Цитата:

Цитата toro
for /d %%i in ("D:\1\*") do rd /q "%%i" 2>nul »

Хм... на сколько я понял, глубина определяется "D:\1\*". А если глубина не известна...?

Raf-9600 26-01-2014 18:43 2296784

Цитата:

Цитата jokerbleck
А если глубина не известна...? »

Тогда вот так - http://www.cyberforum.ru/cmd-bat/thr...ml#post1831467

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

tonmy 26-01-2016 01:56 2599117

----------------------------------------------------------------------------------------
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 2599301

Удалит с проверяемой вниз при любой глубине все папки в которых нет файлов:
Код:

@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 2998271

Вместо пути к папки можно использовать
Код:

%CD%
если нужно удалить все папки в текущей папке (в которой лежит скрипт)

megaloman 08-12-2022 12:35 2998278

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



Время: 16:30.

Время: 16:30.
© OSzone.net 2001-