Estou usando o PowerShell 2.0 e quero canalizar todos os subdiretórios de um determinado caminho. O comando a seguir gera todos os arquivos e diretórios, mas não consigo descobrir como filtrar os arquivos.
Get-ChildItem c:\mypath -Recurse
Eu tentei usar $_.Attributes
para obter os atributos, mas não sei como construir uma instância literal System.IO.FileAttributes
para compará-la. Dentro cmd.exe
seria
dir /b /ad /s
powershell
powershell-2.0
Peter Hull
fonte
fonte
No PowerShell 3.0, é mais simples:
fonte
dir
foi um alias paraGet-ChildItem
, e as opções-Directory
e-File
funcionaram conforme descrito. Eu usei comandosecho $PSVersionTable
,help dir
,dir -Directory
edir -File
para chegar a este comentário.ls
edir
são aliases deGet-ChildItem
escolher o seu venenoUsar
Se você preferir aliases, use
ou
Para recursar subdiretórios também, adicione a
-r
opçãoTestado no PowerShell 4.0, PowerShell 5.0 (Windows 10), PowerShell Core 6.0 (Windows 10, Mac e Linux) e PowerShell 7.0 (Windows 10, Mac e Linux).
Nota : No PowerShell Core, os links simbólicos não são seguidos quando você especifica a
-r
opção. Para seguir os links simbólicos, especifique a-FollowSymlink
opção com-r
.Nota 2 : O PowerShell agora é multiplataforma, desde a versão 6.0. A versão de plataforma cruzada era originalmente chamada PowerShell Core, mas a palavra "Core" foi removida desde o PowerShell 7.0+.
Documentação Get-ChildItem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
fonte
Uma abordagem mais limpa:
Gostaria de saber se o PowerShell 3.0 tem uma opção que retorna apenas diretórios; parece uma coisa lógica a acrescentar.
fonte
-Directory
e-File
bandeirasUsar:
fonte
No PowerShell v2 e mais recente (k representa a pasta em que você está iniciando sua pesquisa):
Se você deseja apenas nomes de pastas e nada mais, use o seguinte:
Se você estiver procurando por uma pasta específica, poderá usar o seguinte. Nesse caso, estou procurando uma pasta chamada
myFolder
:fonte
Menos texto é necessário com esta abordagem:
fonte
Usar:
Isso fornecerá uma saída da estrutura raiz com o nome da pasta apenas para diretórios.
fonte
Usar:
O que faz o seguinte
Get-ChildItem \\myserver\myshare\myshare\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
fonte
Uma abordagem um pouco mais legível e simples pode ser alcançada com o script abaixo:
Espero que isto ajude!
fonte
Você desejará usar Get-ChildItem para obter recursivamente todas as pastas e arquivos primeiro. Em seguida, canalize essa saída para uma cláusula Where-Object que apenas aceita os arquivos.
fonte
A resposta aceita menciona
para obter uma "sequência bruta". Mas, na verdade, objetos do tipo
Selected.System.IO.DirectoryInfo
serão retornados. Para cadeias brutas, o seguinte pode ser usado:A diferença importa se o valor for concatenado para uma sequência:
Select-Object
surpreendentementefoo\@{FullName=bar}
ForEach
operador o esperado:foo\bar
fonte
Select-Object -ExpandProperty FullName
Minha solução é baseada no artigo do TechNet Coisas divertidas que você pode fazer com o cmdlet Get-ChildItem .
Eu usei no meu script, e funciona bem.
fonte
Use este:
fonte
Para responder especificamente à pergunta original (usando IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}
Mas prefiro a solução de Marek (
Where-Object { $_ -is [System.IO.DirectoryInfo] }
).fonte