互联网上关于这个特定主题的很多问题都是针对 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 $_ }
对于较小的文件,差异可能微不足道。但对于大型数据集,管道方法不太可能造成资源紧张,因为它不会尝试一次将整个文件保存在内存中。