Je voudrais utiliser PowerShell pour stocker tout le contenu d'un fichier texte (y compris la ligne vierge de fin qui peut exister ou non) dans une variable. J'aimerais également connaître le nombre total de lignes dans le fichier texte. Quelle est la manière la plus efficace d'y parvenir?
powershell
pseudo
la source
la source
$content = [IO.File]::ReadAllText(".\test.txt")
semble faire la même chose que$content = (gc ".\test.txt" | out-string)
. Puisque le deuxième des deux est plus court, c'est ce que je préfère. Malheureusement, aucune des méthodes que vous avez fournies pour calculer le nombre total de lignes ne prend en compte les lignes vierges de fin. D'autres idées?\r\n
sera comptée.Invoke-WebRequest
?Par ailleurs, dans PowerShell 3.0, vous pouvez utiliser l'
Get-Content
applet de commande avec le nouveau commutateur Raw:la source
Get-Content
fait, mais ce n'est qu'à partir de la 3.0 qu'il a obtenu-Raw
. Sans cela, il est stocké sous forme de tableau de lignes.-Raw
paramètre n'est implémenté par rien de natif.Powershell 2.0:
(voir l'explication détaillée ici)
Le
IO.File.ReadAllText
n'a pas fonctionné pour moi avec un chemin relatif, il recherche le fichier au%USERPROFILE%\$filePath
lieu du répertoire actuel (lors de l'exécution à partir de Powershell ISE au moins):Powershell 3+:
la source
[IO.File]::ReadAllText((Resolve-Path $filePath))
Une autre approche de la lecture d'un fichier que j'apprécie est appelée de manière variée notation variable ou syntaxe variable et consiste simplement à enfermer une spécification de fichier entre accolades précédées d'un signe dollar, à savoir:
Cette notation peut être utilisée comme valeur L ou valeur R ; ainsi, vous pouvez tout aussi facilement écrire dans un fichier avec quelque chose comme ceci:
Une autre utilisation pratique est que vous pouvez modifier un fichier sur place sans fichier temporaire et sans sous-expressions, par exemple:
J'ai d'abord été fasciné par cette notation car il était très difficile d'en savoir plus! Même la spécification PowerShell 2.0 ne le mentionne qu'une seule fois en affichant une seule ligne l'utilisant - mais sans aucune explication ni aucun détail d'utilisation. J'ai par la suite trouvé cette entrée de blog sur les variables PowerShell qui donne de bonnes informations.
Une dernière remarque sur l'utilisation de ceci: vous devez utiliser une désignation de lecteur, c'est-
${drive:filespec}
à- dire comme je l'ai fait dans tous les exemples ci-dessus. Sans le lecteur (par exemple${file.txt}
), cela ne fonctionne pas. Aucune restriction sur la spécification de fichier sur ce lecteur: elle peut être absolue ou relative.la source
Get-Content saisit les données et les vide dans un tableau, ligne par ligne. En supposant qu'il n'y ait pas d'autres exigences spéciales que celles que vous avez énumérées, vous pouvez simplement enregistrer votre contenu dans une variable?
L'exécution juste
$file
retournera le contenu complet. Ensuite, vous pouvez simplement faire$file.Count
(car les tableaux ont déjà une méthode de comptage intégrée) pour obtenir le nombre total de lignes.J'espère que cela t'aides! Je ne suis pas un sorcier de script, mais cela m'a semblé plus facile que beaucoup de choses ci-dessus.
la source