文章目录

PowerShell 循环:foreach、for、while

发布于 2026-04-13 12:27:40 · 浏览 33 次 · 评论 0 条

PowerShell 循环:foreach、for、while

在 PowerShell 中编写脚本时,循环语句是处理重复任务的核心工具。通过循环,可以自动化批量处理文件、管理服务或生成重复数据。本文将详细介绍三种最常用的循环结构:foreachforwhile,并提供具体的操作步骤。


1. foreach 循环

foreach 循环主要用于遍历集合中的每一个项目(例如数组、文件列表或对象列表)。当你需要“对这一堆东西里的每一个都做一次同样的操作”时,这是首选。

操作步骤

  1. 定义 一个包含多个元素的数组变量。
  2. 输入 foreach 关键字,并在括号中定义临时变量和要遍历的集合。
  3. 编写 脚本块 {},在其中指定对每个元素执行的操作。
  4. 运行 脚本查看结果。

以下代码演示如何遍历一组数字并逐个输出:

# 1. 定义数字数组
$numbers = 1, 2, 3, 4, 5

# 2. 使用 foreach 遍历
foreach ($num in $numbers) {
    # 3. 输出当前数字的平方
    Write-Host "数字 $num 的平方是: $($num * $num)"
}
```

### 实际应用场景:批量检查文件

**打开** PowerShell ISE 或 VS Code,**输入**以下代码以获取当前目录下所有 `.txt` 文件并显示其名称:

```powershell
# 获取当前目录下所有 .txt 文件
$files = Get-ChildItem -Path . -Filter *.txt

# 遍历文件列表
foreach ($file in $files) {
    Write-Host "发现文件: $($file.Name)"
}

2. for 循环

for 循环通常用于已知循环次数的场景。它由初始化、条件判断和迭代更新三部分组成。当你需要“精确执行 10 次”或“基于数字索引处理数据”时,使用此循环。

操作步骤

  1. 输入 for 关键字。
  2. 设置 初始变量(例如 $i=0`)。 3. **设定** 循环继续执行的条件(例如 `$i -lt 10,即 $i$ 小于 10)。
  3. 定义 每次循环结束后变量的更新方式(例如 `$i++`,即 $i$ 自增 1)。 5. **填写** 循环体代码。 以下代码演示如何从 1 计数到 5: ```powershell # 初始化 $i 为 1;条件是 $i 小于等于 5;每次循环 $i 加 1
    for ($i = 1; $i -le 5; $i++) { Write-Host "当前计数: $i"
    }

逻辑流程图

为了更清晰地理解 forwhile 循环的判断逻辑,请参考以下流程:

graph TD A["开始"] --> B["初始化变量"] B --> C["检查条件: 是否满足?"] C -- "满足" --> D["执行循环体"] D --> E["更新变量"] E --> C C -- "不满足" --> F["结束"]

3. while 循环

while 循环只要指定条件为真,就会一直执行。它适用于“不知道要循环多少次,只知道达到某个条件就停止”的场景。注意:必须确保循环体内有修改条件的逻辑,否则会造成死循环。

操作步骤

  1. 初始化 一个控制变量。
  2. 输入 while 关键字,并在括号中写入持续执行的条件。
  3. 编写 循环体,并在其中修改控制变量,使条件最终能变为假。

以下代码演示一个简单的倒计时:


# 1. 初始化计数器
$count = 5

# 2. 只要 $count 大于 0,就继续循环
while ($count -gt 0) {
    Write-Host "剩余倒计时: $count"

    # 3. 关键步骤:减少计数值,否则死循环
    $count--
    
    # 暂停一秒,方便观察效果
    Start-Sleep -Seconds 1
}

Write-Host "倒计时结束。"
```

---

## 4. 循环类型对比

为了便于快速选择,下表总结了三种循环的主要区别与适用场景。

| 循环类型 | 核心语法结构 | 最适合场景 | 是否需要预知次数 |
| :--- | :--- | :--- | :---: |
| **foreach** | `foreach ($item in $collection) { }` | 遍历集合(数组、文件列表) | 否 |
| **for** | `for ($i=0; $i -lt 10; $i++) { }` | 指定次数的重复任务,或利用索引处理 | 是 |
| **while** | `while ($condition -eq $true) { }` | 基于条件等待,不确定循环次数 | 否 |

### 选择建议

1.  如果手里已经有一堆数据(列表或数组)要处理,直接 **使用** `foreach`。
2.  如果需要按顺序执行特定次数(例如跑 100 次测试),直接 **使用** `for`。
3.  如果需要等待某个状态改变(例如“等待服务停止”再进行下一步),直接 **使用** `while`。

评论 (0)

暂无评论,快来抢沙发吧!

扫一扫,手机查看

扫描上方二维码,在手机上查看本文