2012-03-27 2 views
8

Я хочу создать пакетный файл Windows, в котором перечислены все пустые подкаталоги, представленные в указанном корневом каталоге пользователя.Как перечислить все пустые каталоги с помощью пакетного файла Windows?

Может ли кто-нибудь помочь в отношении того же?

+0

Проверить это обсуждение: [ "Как список пустых каталогов"] (http://groups.google.com/group/alt.msdos.batch.nt/browse_thread/thread/eec723b8096005b5/6416b835f5fca5d1?pli=1) –

+0

Я обнаружил, что есть инструменты под названием [MarkEmptyDirs] (https://code.google.com/p/markemptydirs/). Вот пример использования синтаксиса: MarkEmptyDirs.exe -d -v C: \ Some \ Dir –

ответ

11
@echo off 
for /d /r %1 %%A in (.) do (
    dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA 
) 

Вышеупомянутое решение игнорирует скрытые папки. Мне также сказали, что использование опций/D и/R с FOR прослушивается, хотя у меня никогда не было проблем с этим.


@echo off 
dir /a /b %1 2>nul | findstr "^" >nul || echo %%~fA 
for /f "eol=: delims=" %%A in ('dir /s /ad /b %1') do (
    dir /a /b "%%~fA" 2>nul | findstr "^" >nul || echo %%~fA 
) 

2-е решение, которое позволяет избежать FOR/D/R будет включать в себя скрытые папки. Но я считаю, что он может потерпеть неудачу, если имена папок содержат Unicode.

+0

Что [dir/a/b "%% ~ fA" 2> nul | findstr "^"> nul] это означает? Я не понимаю, почему вы пытались узнать символ «^»? –

+2

@WillHuang - Я не ищу символ '^', это на самом деле примитивное регулярное выражение, которое будет соответствовать любой строке. Символ '^' представляет начало строки. Оператор '||' условно выполняет 'echo %% ~ fA', только если FINDSTR не удалось, т.е. когда не было найденных строк, что означает, что каталог пуст. – dbenham

+0

Я вижу. Теперь я понимаю. Спасибо, что поделился! :) –

Смежные вопросы