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.