Как удалить пустые папки с помощью командной строки Windows? - PullRequest
68 голосов
/ 20 октября 2011

Мне нужно удалить все пустые папки из папки моего приложения с помощью командной строки Windows?

Как мне создать такой файл bat?

Пожалуйста, помогите мне.

Ответы [ 11 ]

114 голосов
/ 09 мая 2015

Вы можете использовать ROBOCOPY.Это очень просто и может также использоваться для удаления пустых папок внутри большой иерархии.

ROBOCOPY folder1 folder1 /S /MOVE

Здесь и источник, и адресат folder1, так как вам нужно только удалить пустые папки, а не перемещать другиеобязательно) файлы в другую папку./S опция - пропускать копирование (перемещение - в вышеописанном случае) пустых папок.Это также быстрее, поскольку файлы перемещаются внутри одного диска.

57 голосов
/ 07 февраля 2013

Более простой способ - сделать xcopy, чтобы сделать копию всей структуры каталогов с помощью ключа / s. help for / s говорит Копирует каталоги и подкаталоги, кроме пустых.

xcopy dirA dirB /S

где dirA - источник с пустыми папками. DirB будет копией без пустых папок

49 голосов
/ 20 октября 2011
for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

от: http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx

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

 for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"

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

15 голосов
/ 11 апреля 2013

Вам не нужен usebackq:

FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"
8 голосов
/ 08 октября 2013

Добавление к разъеденному ответу с той же самой ссылочной страницы - версия PowerShell http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx#8408736

Get-ChildItem -Recurse . | where { $_.PSISContainer -and @( $_ | Get-ChildItem ).Count -eq 0 } | Remove-Item

или, более кратко,

gci -R . | where { $_.PSISContainer -and @( $_ | gci ).Count -eq 0 } | ri

кредит отправляется автору сообщения

3 голосов
/ 04 октября 2015

из командной строки: для / R / D% 1 в (*) do rd "% 1"

в пакетном файле для / R / D %% 1 в (*) do rd "%% 1 "

Я не знаю, задокументировано ли оно как таковое, но оно работает в W2K, XP и Win 7. И я не знаю, будет ли оно всегда работать, но оно не будетудалить файлы случайно.

2 голосов
/ 27 мая 2015

Это гибрид из вышеперечисленного. Он удаляет ВСЕ файлы старше X дней и удаляет все пустые папки по указанному пути. Для использования просто установите дни, путь к папке и диск

@echo off
SETLOCAL
set days=30
set folderpath=E:\TEST\
set drive=E:

::Delete files
forfiles -p %folderpath% -s -d -%days% -c "cmd /c del /q @path "

::Delete folders
cd %folderpath%
%drive%
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"`
1 голос
/ 02 июня 2016

Установите любой интерпретатор UNIX для Windows (Cygwin или Git Bash) и выполните команду cmd:

find / path / to / directory -empty -type d

To find them

find / path / to / directory -empty -type d -delete

To delete them

(на самом деле не используется приглашение Windows cmd, но это легко и заняло несколько секунд)

0 голосов
/ 07 октября 2017

Будет работать нормально.Это лучший способ удалить старые файлы и рекурсивно удалить пустые каталоги.следующий файл .bat:

forfiles /p [PATH] /s /m [FILE-PATTERN] /d -[DAYS] /c "cmd /c del @path"
for /f "delims=" %%d in ('dir [PATH] /s /b /ad ^| sort /r') do rd "%%d"

Заполнители необходимо заменить следующим образом (без кавычек):

[DAYS] = Max. age of the files in days, e.g. “10”
[PATH] = Path to search for old files and empty folders, e.g. “C:\Backup\”
[FILE-PATTERN] = Pattern that matches files to delete, e.g. “*.bkp”

Сценарий был успешно протестирован в Windows 7 и WindowsServer 2003.

0 голосов
/ 15 марта 2017
@echo off
set /p "ipa= ENTER FOLDER NAME TO DELETE> "
set ipad="%ipa%"
IF not EXIST %ipad% GOTO notfound
IF EXIST %ipad% GOTO found
:found
echo DONOT CLOSE THIS WINDOW
md ccooppyy
xcopy %ipad%\*.* ccooppyy /s > NUL
rd %ipad% /s /q
ren ccooppyy %ipad%
cls
echo SUCCESS, PRESS ANY KEY TO EXIT
pause > NUL
exit 
:notfound
echo I COULDN'T FIND THE FOLDER %ipad%
pause
exit
...