Мне нужно удалить все пустые папки из папки моего приложения с помощью командной строки Windows?
Как я могу создать файл bat, подобный этому?
Пожалуйста, помогите мне.
Мне нужно удалить все пустые папки из папки моего приложения с помощью командной строки Windows?
Как я могу создать файл bat, подобный этому?
Пожалуйста, помогите мне.
for /f "usebackq" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
from: http://blogs.msdn.com/b/oldnewthing/archive/2008/04/17/8399914.aspx
Конечно, d сначала проверит его, не удаляя, прежде чем я сделаю эту команду. Кроме того, здесь изменена версия из комментариев, которая содержит папки с пробелами:
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
P.S. есть больше комментариев в блоге, которые могут помочь вам, поэтому обязательно прочитайте их, прежде чем попробовать это.
Вы можете использовать ROBOCOPY. Это очень просто и может также использоваться для удаления пустых папок внутри большой иерархии.
ROBOCOPY folder1 folder1 /S /MOVE
Здесь оба источника и адресата folder1
, так как вам нужно только удалить пустые папки, а не перемещать другие (обязательные) файлы в другую папку. /S
опция - пропустить копирование (перемещение - в указанном выше случае) пустых папок. Он также быстрее, так как файлы перемещаются внутри одного диска.
Проще всего сделать xcopy, чтобы сделать копию всей структуры каталогов с помощью/s-переключателя. help for/s говорит Копии каталогов и подкаталогов, кроме пустых.
xcopy dirA dirB /S
где dirA является источником с пустыми папками. DirB будет копией без пустых папок
Вам не нужно использовать backq:
FOR /F delims^= %%A IN ('DIR/AD/B/S^|SORT/R') DO RD "%%A"
Добавление к коррумпированному ответу с той же ссылочной страницы - это версия 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
кредит отправляется автору сообщения
из командной строки: для /R/D % 1 в (*) do rd "% 1"
в пакетном файле для /R/D %% 1 в (*) do rd "%% 1"
Я не знаю, зарегистрирован ли он как таковой, но он работает в W2K, XP и Win 7. И я не знаю, будет ли он работать всегда, но он никогда не удалит файлы случайно.
Это птица из вышеперечисленного. Он удаляет ВСЕ файлы старше 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"`
Установите любой интерпретатор UNIX для окон (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, но это легко и потребовалось несколько секунд для запуска)
@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
Все будет хорошо. Это лучший способ удалить старые файлы и рекурсивно удалить пустые каталоги. следующий .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"
script успешно протестирован в Windows 7 и Windows Server 2003.
Ну, просто другое предложение (для простой структуры 1-уровневого каталога без пробелов), я нашел полезным (в какой-то момент от http://www.pcreview.co.uk/forums/can-check-if-folder-empty-bat-file-t1468868.html)
for /f %a in ('dir /ad/b') do (if exist %a\* echo %a not Empty)
или
for /f %a in ('dir /ad/b') do (if not exist %a\* echo %a Empty)
поэтому удаление будет:
for /f %a in ('dir /ad/b') do (if not exist %a\* rmdir %a)