powershell count get-childitem

Script Powershell para contar archivos específicos en directorios y subdirectorios



count get-childitem (1)

Get-ChildItem -Path c:/test -recurse -filter *.xml | Group-Object -Property Directory

Y para obtener una mesa más agradable, podría agregar -NoElement to Group-Object .

Para excluir algunos directorios, intente:

$excludedPaths = @("Windows", "Program Files", "Program Files (x86)"); $searchPaths = Get-ChildItem -Path C:/ -Directory | Where-Object { $excludedPaths -notcontains $_.name } Get-ChildItem -Path $searchPaths -recurse -filter *.xml | Group-Object -Property Directory

Actualización: según la documentación de Get-ChildItem , -filter es más eficiente que -include cuando solo filtra por un patrón. (Si filtra para obtener más patrones, el filtro no funciona y debe usar -include )

Para excluir subárboles enteros:

  • -exclude no funciona, porque se aplica a cada archivo, no poda todo el árbol, y parece que el filtro solo se corresponde con el nombre del archivo, no el directorio
  • su Where-Object no funciona porque $_.Directory no devuelve nada (no estoy seguro de por qué, no he encontrado ninguna documentación)
  • Incluso si mira a otra propiedad ( $_.FullName parece hacer lo que pretende), esto solo eliminaría el directorio en sí, no las rutas que comienzan con el directorio. Tendría que hacer una coincidencia de prefijo de cadena (usando -imatch o -ilike) contra cada cadena en el conjunto de filtros

Estoy tratando de hacer un script de powershell que cuente todos los archivos .xml en directorios y subdirectorios y enumere el valor + ruta.

Hasta ahora he hecho esto:

Get-ChildItem -Path c:/test -recurse -include *.xml

Que está cerca de lo que quiero, pero sin los nombres de los archivos reales, solo las rutas de acceso y conteos de la carpeta.

Esto es lo que estoy recibiendo:

> Directory: C:/test/A_Sub-folder > Mode LastWriteTime Length Name > ---- ------------- ------ ---- > -a--- 27/11/2015 11:29 0 AA.xml > > Directory: C:/test > Mode LastWriteTime Length Name > ---- ------------- ------ ---- > -a--- 27/11/2015 11:29 0 BB.xml > -a--- 27/11/2015 11:29 0 CC.xml > -a--- 27/11/2015 11:29 0 DD.xml

Y estoy tratando de obtener esto (o similar):

> Directory: C:/test/A_Sub-folder > 1 > Directory: C:/test > 3

El plan es ejecutar esta secuencia de comandos en cada unidad raíz (algunas unidades tienen alrededor de 5k archivos .xml, por lo que no estoy seguro de cómo esto afectará el rendimiento).

Editar:

Esto funciona perfectamente para las subcarpetas, pero por alguna razón no funciona en los directorios raíz (por ejemplo, e: /). Estoy tratando de excluir / windows y / program files pero no funciona. ¿Hay alguna manera de excluir directorios raíz en la búsqueda?

Script hasta el momento:

$excludedPaths = @("E:/Windows", "E/Program Files", "E:/Program Files (x86)", "E:/MSSQL", "E:/MSSQL11.MSSQLSERVER"); $pathtocount = Read-Host -Prompt ''Input path to count xml files'' Get-ChildItem -Path $pathtocount -recurse -include *.xml | Where-Object { $excludedPaths -notcontains $_.Directory } | Group-Object -Property Directory | Sort-Object count