Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/212: Рейтинг темы: голосов - 212, средняя оценка - 4.68
Andzzzz

Удаление пустых каталогов и подкаталогов

09.07.2011, 13:25. Показов 46020. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Хотелось бы в определенном каталоге удалить все пустые каталоги и подкаталоги. данная команда "for /d %%i in ("D:\1\*") do rd /q "%%i" 2>nul" вычищает пустые каталоги на фиксированной глубине вложения папок. мне же необходимо наоборот, на не фиксированной глубине.
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.07.2011, 13:25
Ответы с готовыми решениями:

Создание каталогов и подкаталогов с именами, составленными на основе текущей даты
Доброго всем времени суток ! Столкнулся с необходимостью создания BAT файла для работы в автоматическом режиме на локальной машине и...

Удаление файлов из каталога и подкаталогов
@echo off echo Udalenie filov if '%1'=='' goto n dir /b %1 del /p /s %1 \*.txt dir /b %1 goto m :n

Удаление подкаталогов, но с сохранением файлов
Добрый день! Как написать bat файл чтобы удалить подкаталог, а файл внутри перевести на уровень выше? Пример: ...

21
 Аватар для Tornament
71 / 71 / 2
Регистрация: 28.10.2010
Сообщений: 329
09.07.2011, 23:02
Я помню создавал похожую тему... только там было еще удаление файлов ))

Вот код
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@echo off
set file=png
set folder=INPUT\
 
for /f "tokens=*" %%a in ('dir /b ".\%folder%*"') do call :IF "%%a"
for /f "tokens=*" %%a in ('dir /b ".\%folder%*"') do call :IF "%%a"
pause
exit
 
:IF
set x=%~x1
if defined x goto :FILE
if not defined x goto :FOLDER
goto :EOF
 
:FILE
if "%x%"==".bat" goto :EOF
if not "%x%"==".%file%" del /q "%folder%%~1"
goto :EOF
 
:FOLDER
set n=0
for %%b in ("%folder%%~1\*") do call :FOLDER-FILE "%%b"
for %%c in ("%folder%%~1\*") do if exist "%%c" set /a n+=1
if "%n%"=="0" rd /q "%folder%%~1"
goto :EOF
 
:FOLDER-FILE
set x2=%~x1
if not "%x2%"==".%file%" del /q %1
goto :EOF

ВАРНИНГ ВАРНИНГ
, удалит всё кроме png файлов )))
0
835 / 349 / 12
Регистрация: 04.10.2009
Сообщений: 589
10.07.2011, 21:46
Windows Batch file
1
2
3
4
5
6
goto start
:fn1
for /d %%i in ("%~1\*") do (call :fn1 "%%i" & rd /q "%%i")
exit /b
:start
call :fn1 "C:\folder"
C:\folder -это папка из которой удалятся все пустые папки даже если они вложены.
1
1 / 1 / 0
Регистрация: 17.07.2011
Сообщений: 82
17.07.2011, 17:56
Цитата Сообщение от Tornament Посмотреть сообщение
Bash
5
6
for /f "tokens=*" %%a in ('dir /b ".\%folder%*"') do call :IF "%%a"
for /f "tokens=*" %%a in ('dir /b ".\%folder%*"') do call :IF "%%a"

зачем 2-а раза повторять ?
0
 Аватар для ErikPshat
0 / 0 / 0
Регистрация: 26.08.2016
Сообщений: 76
31.01.2017, 10:55
Цитата Сообщение от atributz Посмотреть сообщение
Bash
1
2
3
4
5
6
goto start
:fn1
for /d %%i in ("%~1\*") do (call :fn1 "%%i" & rd /q "%%i")
exit /b
:start
call :fn1 "C:\folder"
C:\folder -это папка из которой удалятся все пустые папки даже если они вложены.
Хороший код. Но у меня немного противоположный вопрос: Как не удалять пустую папку, а
  • Как создать в пустой папке любой файл, чтобы папка не была пуста?
Сделал по аналогии такую конструкцию, но теперь у меня во всех папках создаётся файл, независимо от того, пустая она или нет.

Windows Batch file
1
2
3
4
5
6
goto empdir
:empty
for /d %%i in ("%~1\*") do (call :empty "%%i" & echo Text > "%%i\1.txt")
exit /b
:empdir
call :empty "C:\folder"
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
31.01.2017, 13:53
Цитата Сообщение от ErikPshat Посмотреть сообщение
Как создать в пустой папке любой файл, чтобы папка не была пуста?
Перефразируйте:
Если пустая папка - создать (или нет) файл и все станет просто.
0
 Аватар для ErikPshat
0 / 0 / 0
Регистрация: 26.08.2016
Сообщений: 76
31.01.2017, 14:09
Цитата Сообщение от alpap Посмотреть сообщение
Перефразируйте:
Если пустая папка - создать (или нет) файл и все станет просто.
Для меня не совсем просто. Перефразирую: Если пустая папка - создать файл 1.txt
Windows Batch file
... & if not exist "%%i\*" (echo Text > "%%i\1.txt)
Но в пакетных файлах почему-то не работают условия.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
31.01.2017, 14:52
Цитата Сообщение от ErikPshat Посмотреть сообщение
Если пустая папка - создать файл 1.txt
Windows Batch file
1
dir/b "papka"|>nul find/v "" || rem:>"1.txt"
0
 Аватар для ErikPshat
0 / 0 / 0
Регистрация: 26.08.2016
Сообщений: 76
31.01.2017, 15:15
alpap, что-то не так. В пустых папках файл не создаётся. Они все так и остались пустыми.
Я знаю такой метод, но он работает только на указанную известную папку.

Объясню, почему я выбрал именно ту пакетную конструкцию...
Дело в том, что имеется тысяча всевозможных образов ISO в интернете. Мы скачиваем который нам нравится, запускаем батник, он его распаковывает в исходную папку. Но там может быть куча вложенных подпапок с неизвестными названиями, а иногда попадаются пустые. Так вот, после распаковки образа, исходная папка натравливается на утилиту, которая шифрует все файлы, но, эта утилита пропускает пустые папки, которые принципиально должны быть.

То есть, по сути эта тема подразумевает удаление пустых папок командой
Windows Batch file
1
& rd /q "%%i"
Я просто заменил удаление на создание в папке файла
Windows Batch file
1
& echo Text > "%%i\1.txt"
И не пойму, что из-за этого принципиально изменилось. У меня создаётся файл не в пустых папках, а вообще во всех не пустых папках.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
31.01.2017, 15:24
Сделать все пустые папки, вниз от заданной, не пустыми? Так надо так и ставить условие:
Windows Batch file
1
2
3
@echo off
for /f "delims=" %%a in ('dir /ad/b/s "papka"') do dir/b "%%a"|>nul find/v "" || rem:>"%%a\1.txt"
exit
1
 Аватар для ErikPshat
0 / 0 / 0
Регистрация: 26.08.2016
Сообщений: 76
31.01.2017, 15:42
alpap, о да, отлично работает, всё как надо! Спасибо вам БОЛЬШОЕ!!! Коротко одной строкой и чётко.

Ну я сразу увидел по коду, что так и должно быть, но у меня мозгов не хватило бы на такое чудо инженерной мысли
0
6 / 6 / 0
Регистрация: 08.04.2017
Сообщений: 18
08.04.2017, 09:41
Ребята, ребята, ребят.
Хотелось бы не прописывать в батнике путь к папке, в которой нужно удалить все пустые директории. А нужен батник, такой. Который удалит все пустые папки и подпапки там, где его положили. Напишите пожалста такой код. Заранее благодарю )
0
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
08.04.2017, 15:57
Работает?
Windows Batch file
1
for /f "delims=" %%a in ('dir /a:d /s /b ') do dir /b "%%a"|find /v ""||rd "%%a"
2
6 / 6 / 0
Регистрация: 08.04.2017
Сообщений: 18
09.04.2017, 05:28
Да, спасибо )
0
 Аватар для SimS_77
0 / 0 / 0
Регистрация: 15.02.2024
Сообщений: 4
15.02.2024, 20:46
Немного изменил (дополнил) команду rd, добавил параметры /s /q иначе выдавала отказано в доступе и ничего не удаляла.

Code
1
for /f "delims=" %%a in ('dir /ad/b/s "C:\logs\4990"') do dir /b "%%a"|find /v ""||rd /s /q "%%a"
Но вот столкнулся с такой проблемой данная команда удаляет только конечные папки. Что я имею ввиду у меня в папке образуется очень длинный путь вида folder1\folder2\folder3\filder4.... \folder30

Так вот данная команда удалит только folder30 оставив: folder1\folder2\folder3\filder4.... \folder29

Но так получается что и folder29 пустая. и по хорошему её тоже удалить. Можно конечно 30-ть раз выполнить эту команду, но с другой стороны а может в данный момент всего 3-и папки вложенные все не пустые... а может 100.
Как бы сделать так, что после удаления папки проходила проверка заново а не пуста ли эта папка.
0
 Аватар для Angry Old Man
3047 / 749 / 313
Регистрация: 26.03.2022
Сообщений: 1,400
Записей в блоге: 1
15.02.2024, 23:21
Windows Batch file
1
2
3
4
@Echo Off &Cls
    Set "BoxIn=%~dp0"
    FOR /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%" /S /A:D /B ^|Sort /R`) DO 2>nul Rd "%%f"
Exit /B 0
Удалит пустые подпапки и папки в папке, где лежит этот батник. За один раз. Проверено.

Добавлено через 17 минут

Не по теме:

Виноват. Не увидел, что это глубоко архивная тема.

0
 Аватар для SimS_77
0 / 0 / 0
Регистрация: 15.02.2024
Сообщений: 4
27.02.2024, 19:43
К сожалению данный скрипт:

Code
1
2
    Set "BoxIn=%~dp0"
    FOR /F "usebackq delims=" %%f In (`2^>nul Dir "%BoxIn%" /S /A:D /B ^|Sort /R`) DO 2>nul Rd /s /q "%%f"
удаляет и пустые и не пустые папки.
0
 Аватар для volodin661
6806 / 2305 / 349
Регистрация: 10.12.2013
Сообщений: 7,932
28.02.2024, 17:14
Цитата Сообщение от SimS_77 Посмотреть сообщение
удаляет и пустые и не пустые папки.
ну и норм.
дедушка старый, ему всё равно

Добавлено через 13 минут
delempty.bat

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@@@  ::: СОБАЧЬЯ ШАПКА :::
@@@  IF EXIST "__%~N0.exe" ("__%~N0.exe" %*) & ( EXIT /B )  
@@@  FOR /F "TOKENS=3" %%X IN ('reg query "HKLM\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" /V InstallPath') DO @(SET DOTNET=%%X)
@@@  IF NOT DEFINED DOTNET (ECHO .NET ERROR. Goodbye ) & ( EXIT /B )
@@@  FINDSTR /B /VC:@@@  "%~F0" > "__%~N0.cs"
@@@  %DOTNET%CSC.EXE -NOLOGO -OPTIMIZE+ -OUT:"__%~N0.exe" -TARGET:exe "__%~N0.cs"
@@@  IF EXIST "__%~N0.exe" ("__%~N0.exe" %*)
@@@  EXIT /B
 
using System;
using System.IO;
using System.Linq;
 
class Program
{
    static void Main(string[] args)
    {
        if ( args.Length > 0 ) {
       
            DeleteEmptyDirs( args[0] );  
            Console.WriteLine( "All done !" );
        }
        else {
            Console.WriteLine( "Nothing to do. Specify starting directory" );
        }
    }
 
    static void DeleteEmptyDirs(string dir)
    {
        if (String.IsNullOrEmpty(dir))
            throw new ArgumentException(
                "Starting directory is a null reference or an empty string",
                "dir");
 
        try
        {
            foreach (var d in Directory.EnumerateDirectories(dir))
            {
                DeleteEmptyDirs(d);
            }
 
            var entries = Directory.EnumerateFileSystemEntries(dir);
 
            if (!entries.Any())
            {
                try
                {
                    Directory.Delete(dir);
                }
                catch (UnauthorizedAccessException) { }
                catch (DirectoryNotFoundException) { }
            }
        }
        catch (DirectoryNotFoundException) { }
        catch (UnauthorizedAccessException) { }
    }
 
}
Пример использования:

Windows Batch file
1
delempty c:\users\user\test
или так ( быстрее и не нужен ватник ):
Windows Batch file
1
__delempty c:\users\user\test
0
 Аватар для SimS_77
0 / 0 / 0
Регистрация: 15.02.2024
Сообщений: 4
28.02.2024, 19:01
К сожалению результат работы программы такой:
Миниатюры
Удаление пустых каталогов и подкаталогов  
0
 Аватар для SimS_77
0 / 0 / 0
Регистрация: 15.02.2024
Сообщений: 4
28.02.2024, 19:17
На самом деле поразмыслив над задачей. Пришёл к выводу, что мне необходимо удалить все папки уровень вложенность которых более 3-х.
Короче есть папка в которой C:\log\ в ней папки вида 0001, 0002... 9999\ в них могут быть просто файлы логов, а могут быть ещё папки dir1, dir2. вот все папки что дальше этих условных dir1 и dir2 мне необходимо удалить. они могут быть как пустыми так и с файлами.
Для наглядности приведу скрин окна с древом папок, а то объяснятель тот ещё из меня.

У меня работает скрипт, который чистит все файлы по времени, то есть все файлы в папке c:\log старше 240 дней удаляет, но оставляет папки:
Bash
1
2
forfiles /p C:\log /s /d -240 /c "cmd /c del @path /q"
exit
А мне бы хотелось, чтоб и папки тоже удалялись, но не все, а только дальше второго/третьего вложения. Папки с номерами 0001...9999 точно нужны.
Миниатюры
Удаление пустых каталогов и подкаталогов  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2024, 19:17
Помогаю со студенческими работами здесь

Удаление файлов и очистка подкаталогов с сохранением структуры папок
Дорого времени суток. Прошу помощи в написании батника следующего свойства: Имеем сетевую файловую помойку - \\192.168.0.***\ В корне...

Переместить все файлы из всех подкаталогов в текущий каталог и удалить подкаталоги, если у них нет своих подкаталогов
Переместить все файлы из всех подкаталогов в текущий каталог и удалить подкаталоги, если у них нет своих подкаталогов

Удаление всех пустых файлов
1.Написать bat-файл, который удаляет все пустые файлы в каталоге, указанном в качестве параметра и все свои действия по удалению ...

Удаление определенных каталогов
Собственно, есть некая папка, в которой лежит батник. Нужно, чтобы он прошелся содержащимся в этой папке каталогам и подкаталогам, и если...

Удаление списка каталогов
Коллеги, помогите батником или может есть сторонние тулзы для такой, думаю, относительно тривиальной задачи: нужно сделать del /s /q по...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru