4 votes

Comment faire pour que PowerShell lise ligne par ligne et la passe dans une autre commande ?

Un grand nombre de questions sur Internet concernant ce sujet spécifique sont orientées vers BASH pour linux, je me demandais si la même chose pouvait être réalisée en utilisant simplement PowerShell.

Sur Bash, on peut utiliser :

for line in $(cat file.txt); do echo $line; done

Et puis bash va boucler chaque ligne de file.txt et l'envoyer à echo ou n'importe quelle commande que vous utilisez.

Comment réaliser la même chose sur le système Windows ? powershell ?

J'ai découvert que PS a le " Get-Content "Cette commande fonctionne de la même manière que la commande " cat "mais je n'ai pas pu continuer à partir de là.

3voto

Ok, il s'avère que ce n'était pas si difficile, mais je le laisse ici pour les futurs internautes.

PowerShell a un ensemble défini de boucles, l'une d'entre elles appelée ForEach
On peut simplement faire :

ForEach ($line in Get-Content [File]) {[Command]) $line}

**_[File]_** est le chemin du fichier à partir duquel vous lisez et
**_[Command]_** est la commande dans laquelle vous envoyez chaque ligne.

À titre d'exemple :

ForEach ($line in Get-Content thingstoecho.txt) {echo $line}

1voto

Keith Miller Points 6004

Une alternative à votre réponse, qui lit l'ensemble du fichier avant de transmettre la première ligne pour un traitement ultérieur, est de tirer parti du pipeline et de commencer le traitement dès que la première ligne est lue.

Get-Content thingstoecho.txt | ForEach-Object { echo $_ }

Pour les petits fichiers, la différence peut être insignifiante. Mais pour les grands ensembles de données, l'apprache pipeline est moins susceptible de grever les ressources, car elle n'essaie pas de garder tout le fichier en mémoire en une seule fois.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X