Em um sistema * NIX, você pode digitar facilmente rmdir * para remover todos os diretórios vazios em . . O rmdir irá reclamar sobre diretórios não vazios e não apagá-los.
Basicamente, se você tem uma árvore como esta:
/
d0/
file
d1/
d0/
d2/
d3/
Em seguida, a execução de rmdir * de / resultará na exclusão de d2/ e d3/ . d0/ e d1/ serão deixados sozinhos com um erro ecoado sobre eles não serem vazios, para evitar que o conteúdo seja perdido no limbo.
/
d0/
file
d1/
d0/
Não consegui encontrar um equivalente do Windows para isso. O mais parecido é rmdir /s . , que é equivalente a rm -r . , exceto que ele se recusa a excluir . porque o shell está usando. Não tenho certeza se rm -r . também se recusa a excluir . . Não testou isso.
Como * NIX rmdir , o Windows rmdir se recusará a excluir um único diretório se não estiver vazio. No entanto, não parece haver um seletor de curinga como o típico * , o que é estranho porque esse token pode ser usado em qualquer outro lugar.
É esse tipo de coisa que me frustra com a linha de comando do Windows. Se eu tiver 4.000 diretórios, rmdir ing de cada diretório explicitamente obviamente não é uma opção sã. Deve haver uma maneira melhor.
Eu tentei criar uma instrução for de acordo com a sintaxe na ajuda de uso ( for /? )
FOR %variable IN (set) DO command [command-parameters]
... para obter ...
for %f in * do rmdir %f
e várias variações disso (como mudar o segundo %f para %f% , encapsulando a sintaxe mesmo sabendo que é insensível a maiúsculas e minúsculas, cercando * com parens, et al). Nenhum dos quais funcionou. Tudo falhando com erros inexplicáveis e inúteis, como:
%f was unexpected at this time.
* was unexpected at this time.
(NB: estou tentando isso no prompt interativo, não em um script)
Ou no caso da (*) variação ...
>for %f in (*) do rmdir %f
>rmdir file
The directory name is invalid.
>dir
Volume in blah blah blah
Directory of blah
blah blah <DIR> .
blah blah <DIR> ..
blah blah <DIR> nonemptydir
blah blah <DIR> emptydir
blah blah 1 file
1 File(s) 1 bytes
4 Dir(s) huge number bytes free
... nem sequer toca nos diretórios.
Eu não entendo por que isso faria isso. Eu segui a sintaxe como ela foi descrita na ajuda.
O Powershell não é uma opção. Eu preciso ser capaz de fazer isso em um shell que é garantido para ser instalado, ou seja, cmd.exe . Jeff Zeitlin me informou que o Powershell é garantido > = Windows 7 . No entanto, cmd.exe ainda é o preferido.