Estoy usando PowerShell 2.0 y quiero canalizar todos los subdirectorios de una ruta determinada. El siguiente comando genera todos los archivos y directorios, pero no puedo entender cómo filtrar los archivos.
Get-ChildItem c:\mypath -Recurse
He intentado usar $_.Attributespara obtener los atributos, pero no sé cómo construir una instancia literal System.IO.FileAttributespara compararlo. En cmd.exeeso estaría
dir /b /ad /s
powershell
powershell-2.0
Peter Hull
fuente
fuente

En PowerShell 3.0, es más simple:
fuente
dirtenía un aliasGet-ChildItem, y las opciones-Directoryy-Filefuncionaron como se describe. Solía comandosecho $PSVersionTable,help dir,dir -Directoryydir -Filepara llegar a este comentario.lsydirson alias deGet-ChildItemelegir tu venenoUtilizar
Si prefiere alias, use
o
Para recurrir subdirectorios también, agregue la
-ropción.Probado en PowerShell 4.0, PowerShell 5.0 (Windows 10), PowerShell Core 6.0 (Windows 10, Mac y Linux) y PowerShell 7.0 (Windows 10, Mac y Linux).
Nota : En PowerShell Core, los enlaces simbólicos no se siguen cuando especifica el
-rconmutador. Para seguir enlaces simbólicos, especifique el-FollowSymlinkinterruptor con-r.Nota 2 : PowerShell ahora es multiplataforma, desde la versión 6.0. La versión multiplataforma se llamaba originalmente PowerShell Core, pero la palabra "Core" se ha eliminado desde PowerShell 7.0+.
Documentación de Get-ChildItem: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.management/get-childitem
fuente
Un enfoque más limpio:
Me pregunto si PowerShell 3.0 tiene un conmutador que solo devuelve directorios; Parece una cosa lógica agregar.
fuente
-Directoryy-FileUtilizar:
fuente
Desde PowerShell v2 y posteriores (k representa la carpeta en la que está comenzando su búsqueda):
Si solo desea nombres de carpetas, y nada más, use esto:
Si está buscando una carpeta específica, puede usar lo siguiente. En este caso, estoy buscando una carpeta llamada
myFolder:fuente
Se requiere menos texto con este enfoque:
fuente
Utilizar:
Esto le dará una salida de la estructura raíz con el nombre de la carpeta solo para directorios.
fuente
Utilizar:
Que hace lo siguiente
Get-ChildItem \\myserver\myshare\myshare\ -DirectorySelect-Object -Property nameconvertto-csv -NoTypeInformationOut-File c:\temp\mydirectorylist.csvfuente
Se podría lograr un enfoque un poco más legible y simple con el siguiente script:
¡Espero que esto ayude!
fuente
Querrá usar Get-ChildItem para obtener recursivamente todas las carpetas y archivos primero. Y luego canalice esa salida en una cláusula Where-Object que solo toma los archivos.
fuente
La respuesta aceptada menciona
para obtener una "cadena cruda". Pero, de hecho, los objetos de tipo
Selected.System.IO.DirectoryInfoserán devueltos. Para cadenas sin formato se puede usar lo siguiente:La diferencia es importante si el valor se concatena en una cadena:
Select-Objectsorprendentefoo\@{FullName=bar}ForEachoperador el esperado:foo\barfuente
Select-Object -ExpandProperty FullNameMi solución se basa en el artículo de TechNet Cosas divertidas que puede hacer con el cmdlet Get-ChildItem .
Lo utilicé en mi script y funciona bien.
fuente
Usa este:
fuente
Para responder la pregunta original específicamente (usando IO.FileAttributes):
Get-ChildItem c:\mypath -Recurse | Where-Object {$_.Attributes -and [IO.FileAttributes]::Directory}Sin embargo, prefiero la solución de Marek (
Where-Object { $_ -is [System.IO.DirectoryInfo] }).fuente