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 $_.Attributes
para obtener los atributos, pero no sé cómo construir una instancia literal System.IO.FileAttributes
para compararlo. En cmd.exe
eso estaría
dir /b /ad /s
powershell
powershell-2.0
Peter Hull
fuente
fuente
En PowerShell 3.0, es más simple:
fuente
dir
tenía un aliasGet-ChildItem
, y las opciones-Directory
y-File
funcionaron como se describe. Solía comandosecho $PSVersionTable
,help dir
,dir -Directory
ydir -File
para llegar a este comentario.ls
ydir
son alias deGet-ChildItem
elegir tu venenoUtilizar
Si prefiere alias, use
o
Para recurrir subdirectorios también, agregue la
-r
opció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
-r
conmutador. Para seguir enlaces simbólicos, especifique el-FollowSymlink
interruptor 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
-Directory
y-File
Utilizar:
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\ -Directory
Select-Object -Property name
convertto-csv -NoTypeInformation
Out-File c:\temp\mydirectorylist.csv
fuente
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.DirectoryInfo
serán devueltos. Para cadenas sin formato se puede usar lo siguiente:La diferencia es importante si el valor se concatena en una cadena:
Select-Object
sorprendentefoo\@{FullName=bar}
ForEach
operador el esperado:foo\bar
fuente
Select-Object -ExpandProperty FullName
Mi 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