lista todos os arquivos em todos os subdiretórios, não no diretório atual

0

Existe uma maneira de listar todos os arquivos em todos os subdiretórios, exceto aqueles no diretório atual?

dir /s /b lista todos os arquivos, incluindo aqueles no diretório atual. Não é isso que eu quero.

    
por yky 11.07.2016 / 09:43

2 respostas

2

Use o Powershell:

 Get-ChildItem .\*\*

Editar:

O exemplo acima, na verdade, só recebe o segundo nível ou diretórios e não o conteúdo das subpastas.

@ resposta do convidado é a melhor:

Get-ChildItem -Directory | ForEach-Object {Get-ChildItem -Recurse | Select-Object FullName}
    
por 11.07.2016 / 10:32
1

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}

    
por 11.07.2016 / 10:00

Tags