La longitud de Powershell no aparecerá en la salida de Get-ChildItem
Estoy probando este comando en Windows 10 PowerShell:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime
El resultado solo contiene FullName
, while LastAccessTime
y Length
falta en la salida.
Captura de pantalla de PowerShell
¿Qué estoy haciendo mal?
Respuestas
Esto funcionará:
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Export-Csv list.csv
El problema es simplemente un problema de visualización :
Debido a que las rutas entre los objetos de salida son largas y
FullName
es la primera propiedad seleccionada, las propiedades restantes (columnas) no se imprimen porque no caben en la pantalla. Sin embargo, las propiedades están presentes y se pueden usar mediante programación.Nota: Si la intención es guardar en un archivo para un procesamiento programático posterior , no debe usar
>
/Out-File
, que da como resultado el mismo formato de visualización que ve en la consola (terminal), porque este formato está destinado solo para el observador humano .- Para el procesamiento programático , use un formato de datos estructurados como CSV , como se muestra en la respuesta de Ashok Prasath
Soluciones alternativas :
Una solución rápida y sucia es poner la
FullName
propiedad en último lugar , como aconseja Doug Maurer , lo que hará que se muestren todas las propiedades (columnas), aunque losFullName
valores de las propiedades se truncarán (simbolizarán con…
) y, en particular, desde el inicio de las rutas:# FullName is placed *last* # Caveat: Paths will be truncated at the *end*. Get-ChildItem -Recurse | select Length, LastAccessTime, FullName
Si no le importa cambiar a un formato basado en listas , donde cada valor de propiedad se representa en su propia línea con el prefijo del nombre de la propiedad, canalice a Format-List; tenga en cuenta que los valores demasiado largos se ajustarán a la línea :
Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Format-List
Si desea una salida tabular y no le importa el ajuste de línea en su salida , puede canalizar Out-Stringcon un
-Width
valor lo suficientemente grande para adaptarse a todas las columnas (tenga en cuenta que Out-Filetambién es compatible-Width
):Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300
Si prefiere el desplazamiento horizontal al ajuste de línea, puede guardar lo anterior en un archivo y abrir en él un editor de texto o, con un editor de texto como Visual Studio Code , puede canalizar directamente la salida a él:
# Opens the output directly in a new Visual Studio Code editor tab. Get-ChildItem -Recurse | select FullName,Length,LastAccessTime | Out-String -Width 300 | code -
De lo contrario, si desea ver la visualización tabular en la consola , en el orden de columna exacto especificado y sin
FullName
ajuste de línea , su única opción es truncar los valores para que todas las columnas quepan; tenga en cuenta que, por brevedad, estoy omitiendo la llamadaselect
( Select-Object) a favor del uso directo de Format-Table:Get-ChildItem -Recurse | Format-Table @{ e='FullName'; w=[Console]::WindowWidth-45; a='right'}, Length, LastAccessTime
Observe cómo el ancho de la columna (
w
entrada, abreviatura dewidth
) se basa en la ventana de la consola con ([Console]::WindowWidth
)45
caracteres menos , para mostrar la mayor cantidad deFullName
valores posible mientras deja espacio para las otras dos columnas; también, para garantizar que el truncamiento (simbolizado con…
se aplique al inicio de la ruta, de modo que el nombre del archivo / directorio siempre se muestre), la columna esté alineada a la derecha (a través de laa
entrada, abreviatura dealignment
); si prefiere el truncamiento del final de la ruta, omita laa
entrada (que por defecto esleft
).Para obtener más información sobre esta forma basada en hashtable (
@{ ... }
) de especificar las llamadas propiedades calculadas paraFormat-Table
, incluida una forma de truncar desde el principio y al mismo tiempo mantener la alineación a la izquierda , consulte esta respuesta .