Есть ли способ удалить все пустые подкаталоги под заданным каталогом из пакетного файла?Как удалить только пустые каталоги из пакетного файла
Или можно рекурсивно скопировать каталог, но исключая любые пустые каталоги?
Есть ли способ удалить все пустые подкаталоги под заданным каталогом из пакетного файла?Как удалить только пустые каталоги из пакетного файла
Или можно рекурсивно скопировать каталог, но исключая любые пустые каталоги?
Чтобы скопировать игнорируя пустые каталоги Вы можете использовать один из:/
robocopy c:\source\ c:\dest\ * /s
xcopy c:\source c:\dest\*.* /s
XCopy в s будет игнорировать пустую папку при копировании
xcopy * path\to\newfolder /s /q
@echo off
setlocal ENABLEEXTENSIONS
call :rmemptydirs "%~1"
goto:EOF
:rmemptydirs
FOR /D %%A IN ("%~1\*") DO (
REM recurse into subfolders first...
call :rmemptydirs "%%~fA"
)
RD "%~f1" >nul 2>&1
goto:EOF
вызовов с: rmemptydirs.cmd "c:\root dir to delete empty folders in"
Вы действительно есть два вопроса:
1. Есть ли способ удалить все пустые подкаталоги под заданным каталогом из пакетного файла?
Да. Этот однострочный пакетный файл DOS работает для меня. Вы можете передать аргумент для шаблона/root или использовать текущий каталог.
for /f "delims=" %%d in ('dir /s /b /ad %1 ^| sort /r') do rd "%%d" 2>nul
Причина я использую «реж | рода» для исполнения (как «реж» и «своего рода» довольно быстро). Это позволяет избежать рекурсивной функции пакетного решения, используемое в одном из других ответов, которые вполне допустимы, но может быть раздражающе медленным :-(
2. Или это можно рекурсивно скопировать каталог, но исключая любые пустые каталоги? .
Есть несколько способов сделать это, перечисленных в других ответах
Этот пакетный файл делает трюк просто отлично от любого пути, в моем случае я использую для Windows переменной среды IWAY61:
@echo off
cd %IWAY61%
for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d"
Зачем использовать внешнюю команду dir, когда FOR имеет поддержку каталогов с/D и/R? – Anders
Спасибо за указание @Anders, его только мои знания о командных командах ограничены, + 1ed к вашим. Я узнал что-то еще. Благодарю. – YOU
@ S.Mark: Теперь, когда я посмотрел на него немного больше, ваш код FOR имеет несколько проблем: 1) пробелы в путях. 2) Вы уверены, что DIR сначала напечатает самую глубокую папку? Если нет, c: \ folder1 \ folder2 не удастся, если папка2 пуста, а в папке 1 есть только папка2. – Anders