2010-04-23 3 views

ответ

5

Чтобы скопировать игнорируя пустые каталоги Вы можете использовать один из:/

robocopy c:\source\ c:\dest\ * /s 
xcopy c:\source c:\dest\*.* /s 
3

XCopy в s будет игнорировать пустую папку при копировании

xcopy * path\to\newfolder /s /q 
+0

Зачем использовать внешнюю команду dir, когда FOR имеет поддержку каталогов с/D и/R? – Anders

+1

Спасибо за указание @Anders, его только мои знания о командных командах ограничены, + 1ed к вашим. Я узнал что-то еще. Благодарю. – YOU

+0

@ S.Mark: Теперь, когда я посмотрел на него немного больше, ваш код FOR имеет несколько проблем: 1) пробелы в путях. 2) Вы уверены, что DIR сначала напечатает самую глубокую папку? Если нет, c: \ folder1 \ folder2 не удастся, если папка2 пуста, а в папке 1 есть только папка2. – Anders

3
@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"

13

Вы действительно есть два вопроса:

1. Есть ли способ удалить все пустые подкаталоги под заданным каталогом из пакетного файла?

Да. Этот однострочный пакетный файл DOS работает для меня. Вы можете передать аргумент для шаблона/root или использовать текущий каталог.

for /f "delims=" %%d in ('dir /s /b /ad %1 ^| sort /r') do rd "%%d" 2>nul 

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

2. Или это можно рекурсивно скопировать каталог, но исключая любые пустые каталоги? .

Есть несколько способов сделать это, перечисленных в других ответах

-1

Этот пакетный файл делает трюк просто отлично от любого пути, в моем случае я использую для Windows переменной среды IWAY61:

@echo off 

cd %IWAY61% 

for /f "usebackq delims=" %%d in (`"dir /ad/b/s | sort /R"`) do rd "%%d" 
Смежные вопросы