Existem várias soluções, que tentarei explicar uma por uma.
Lote
1) for /d %i in (*) do @dir /b /s "%i"
e (*)
expande para todos os arquivos no diretório atual.
for /d
, em seguida, percorre todos os diretórios, excluindo os arquivos regulares, executando dir /b /s
para cada diretório.
Como for
echos executou comandos, @
é usado para suprimir o eco.
2) for /f "delims=" %i in ('dir /b /A:D') do @dir /b /s "%i"
'dir /b /A:D'
retorna todos os diretórios no diretório atual, com cada diretório em uma linha.
"delims="
instrui for /f
a não tokenizar uma linha, mas atribui a linha inteira a %i
.
for /f
, em seguida, percorre todas as linhas, executando dir /b /s
para cada linha.
Use %%i
em vez de %i
no arquivo em lotes.
PowerShell
dir *\*
apenas retorna arquivos nos diretórios de nível 2.
dir -recurse *\*
também retorna arquivos em diretórios mais profundos, mas não mostra a pasta vazia no nível 2.
Comandos corretos que adotam a mesma abordagem em Lote :
1) dir | where {$_.PsIsContainer} | foreach {dir -recurse $_} | foreach {echo $_.fullname}
2) dir -directory | foreach {dir -recurse $_} | foreach {echo $_.fullname}