如何让 PowerShell 逐行读取并将其传递到另一个命令?

如何让 PowerShell 逐行读取并将其传递到另一个命令?

互联网上关于这个特定主题的很多问题都是针对 Linux 的 BASH,我想知道是否可以仅使用 PowerShell 实现同样的事情。

在 Bash 上,可以使用:

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

然后 bash 将循环遍历 file.txt 的每一行并将其发送到 echo 或您正在使用的任何命令。

在 Windows 上如何实现同样的功能?电源外壳

我发现 PS 具有Get-Content与“ ”类似的“ ”命令cat,但我无法从那里继续。

答案1

好吧,事实证明这并不是那么困难,但我还是把它留在这里,以便未来的互联网人们能够理解。

PowerShell 有一组定义的循环,其中一个名为ForEach
可以简单地这样做:

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

[File]您读取的文件路径在哪里以及您将每行发送到的命令在
哪里。[Command]

举个例子:

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

答案2

您的答案的另一种方法是利用管道并在读取第一行后开始处理,即在传递第一行进行后续处理之前读取整个文件。

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

对于较小的文件,差异可能微不足道。但对于大型数据集,管道方法不太可能造成资源紧张,因为它不会尝试一次将整个文件保存在内存中。

相关内容