Me gustaría usar PowerShell para almacenar todo el contenido de un archivo de texto (incluida la línea en blanco al final que puede existir o no) en una variable. También me gustaría saber el número total de líneas en el archivo de texto. ¿Cuál es la forma más eficaz de hacer esto?
powershell
Mella
fuente
fuente
$content = [IO.File]::ReadAllText(".\test.txt")
parece hacer lo mismo que$content = (gc ".\test.txt" | out-string)
. Como el segundo de los dos es más corto, eso es lo que prefiero. Desafortunadamente, ninguno de los métodos que proporcionó para calcular el número total de líneas tiene en cuenta las líneas en blanco finales. ¿Alguna otra idea?\r\n
contará cualquier línea con .Invoke-WebRequest
?En una nota al margen, en PowerShell 3.0 puede usar el
Get-Content
cmdlet con el nuevo modificador Raw:fuente
Get-Content
hizo, pero no fue hasta la 3.0 que lo consiguió-Raw
. Sin eso, se almacena como una matriz de líneas.-Raw
parámetro no está implementado por nada nativo.Powershell 2.0:
(ver explicación detallada aquí)
El
IO.File.ReadAllText
no funcionó para mí con una ruta relativa, se busca el archivo en%USERPROFILE%\$filePath
lugar del directorio actual (cuando se ejecuta desde PowerShell ISE al menos):Powershell 3+:
fuente
[IO.File]::ReadAllText((Resolve-Path $filePath))
Un enfoque más para leer un archivo que me gusta se conoce de diversas maneras como notación variable o sintaxis variable e implica simplemente encerrar una especificación de archivo entre llaves precedidas por un signo de dólar, a saber:
Esta notación se puede utilizar como valor L o valor R ; por lo tanto, podría escribir fácilmente en un archivo con algo como esto:
Otro uso útil es que puede modificar un archivo en su lugar sin un archivo temporal y sin subexpresiones, por ejemplo:
¡Al principio me fascinó esta notación porque era muy difícil averiguar algo sobre ella! Incluso la especificación PowerShell 2.0 lo menciona solo una vez y muestra solo una línea usándolo, pero sin explicación ni detalles de uso. Posteriormente, encontré esta entrada de blog sobre variables de PowerShell que brinda algunas buenas perspectivas.
Una nota final sobre el uso de esto: debe usar una designación de unidad, es decir,
${drive:filespec}
como he hecho en todos los ejemplos anteriores. Sin la unidad (por ejemplo${file.txt}
) no funciona. No hay restricciones en la especificación del archivo en esa unidad: puede ser absoluta o relativa.fuente
Get-Content toma datos y los vuelca en una matriz, línea por línea. Suponiendo que no haya otros requisitos especiales que los que enumeró, ¿podría guardar su contenido en una variable?
Ejecutar solo
$file
devolverá el contenido completo. Entonces puede hacer$file.Count
(porque las matrices ya tienen un método de recuento incorporado) para obtener el número total de líneas.¡Espero que esto ayude! No soy un genio de las secuencias de comandos, pero esto me pareció más fácil que muchas de las cosas anteriores.
fuente