2012-07-19 19 views
9

Estoy tratando de obtener una lista recursiva de archivos en una estructura de subcarpeta determinada y luego guardarlos en una tabla para poder usar un bucle foreach para trabajar con cada fila. Tengo el siguiente código:Uso de ForEach con Get-ChildItem -recurse

$table = get-childitem -recurse | where {! $_.PSIsContainer} | Format-Table Name, Length 

foreach ($row in $table) 
{ 
    $row[0] 
    $row[1] 
} 

Si trato de salida $table como está, se ve perfecto, con dos columnas de datos de todos los archivos. Si intento y paso con foreach (como arriba), recibo el mensaje de error "Unable to index into an object of type Microsoft.PowerShell.Commands.Internal.Format.FormatEndData.".

¿Qué estoy haciendo mal?

Respuesta

9

No sé por qué estás tratando de pasar por los datos formateados. Pero tal como es, $table es solo una colección de cadenas. Por lo tanto, puede hacer lo siguiente:

$table = get-childitem -recurse | where {! $_.PSIsContainer} | Format-Table Name, Length 

foreach ($row in $table) 
{ 
    $row 
} 

Pero no sé por qué lo desea. Si usted está tratando de hacer algo con los datos en el archivo que podría intentar esto:

$files = get-childitem -recurse | where {! $_.PSIsContainer} 
foreach ($file in $files) 
{ 
    $file.Name 
    $file.length 
} 
+0

Lo que intento hacer es crear una matriz de datos desde el gci, luego construir una tabla SQL usando un ciclo foreach y una serie de comandos "INSERT INTO". Tu segundo ejemplo me dio exactamente lo que necesito. ¡Gracias! –

8

Nunca utilice ninguno de los comandos de formato hasta que haya terminado de trabajar con los datos. Los comandos de formato convierten todo en cadenas, por lo que pierde los objetos originales.

$table = get-childitem -recurse | where {! $_.PSIsContainer} 
foreach($file in $table){ 
    $file.Name 
    $file.FullName 
} 
+2

Por lo que vale la pena, esta gotcha se acerca lo suficiente que estoy seguro de que es una pregunta víctima en alguna parte. No vi uno rápidamente. Si alguien se encuentra con esto, publica y obtendré los votos cerrados comenzados. – EBGreen