VBScript 循环

VBScript 循环语句详解

VBScript 提供了多种循环结构,用于重复执行代码块。常见的有 For…NextFor Each…NextDo…Loop(包括 While 和 Until 变体)和 While…Wend(较旧,不推荐)。

1. For…Next 循环(计数循环)

最常用,适合已知循环次数的情况。

语法

For 计数器 = 开始值 To 结束值 [Step 步长]
    语句块
Next
  • Step 默认是 1,可正可负。
  • 步长为负时,开始值应大于结束值。

示例1:基本计数

Option Explicit

Dim i
For i = 1 To 10
    MsgBox "第 " & i & " 次循环"
Next

示例2:步长为2,倒序

Dim i
For i = 10 To 1 Step -2
    MsgBox i   ' 输出 10, 8, 6, 4, 2
Next

示例3:提前退出循环(Exit For)

Dim i, sum
sum = 0
For i = 1 To 100
    sum = sum + i
    If sum > 300 Then
        MsgBox "和超过300了,当前i=" & i
        Exit For   ' 跳出循环
    End If
Next
MsgBox "总和:" & sum

2. For Each…Next 循环(遍历集合/数组)

专门用于遍历数组元素或对象集合(如文件夹中的文件)。

语法

For Each 元素 In 集合/数组
    语句块
Next

示例1:遍历数组

Dim fruits(3)
fruits(0) = "苹果"
fruits(1) = "香蕉"
fruits(2) = "橙子"

Dim fruit
For Each fruit In fruits
    MsgBox fruit
Next

示例2:遍历文件夹所有文件(实用!)

Dim fso, folder, file

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Test")

For Each file In folder.Files
    MsgBox file.Name & " 大小:" & file.Size & " 字节"
Next

3. Do…Loop 循环(条件循环)

适合循环次数未知、需根据条件判断的情况。条件可以放在开头或结尾。

变体一:Do While…Loop(条件为真时继续)

Do While 条件
    语句块
Loop

变体二:Do Until…Loop(条件为假时继续)

Do Until 条件
    语句块
Loop

变体三:条件放在结尾(至少执行一次)

Do
    语句块
Loop While 条件

Do
    语句块
Loop Until 条件

示例1:用户输入直到正确

Dim password, input

password = "123456"

Do
    input = InputBox("请输入密码:")
    If input <> password Then
        MsgBox "密码错误,请重试!"
    End If
Loop Until input = password

MsgBox "密码正确,欢迎!"

示例2:累加直到超过1000

Dim num, sum
num = 1
sum = 0

Do While sum <= 1000
    sum = sum + num
    num = num + 1
Loop

MsgBox "累加到超过1000时,num=" & num & ",总和=" & sum

示例3:至少执行一次

Dim answer

Do
    answer = MsgBox("你想继续吗?", vbYesNo + vbQuestion, "确认")
Loop While answer = vbYes

MsgBox "程序结束"

提前退出:Exit Do

Dim i
i = 0
Do
    i = i + 1
    If i = 5 Then Exit Do   ' 遇到5就退出
    MsgBox i
Loop While i < 10

4. While…Wend(旧式循环,不推荐)

功能类似 Do While,但不能放条件在结尾,也不能用 Exit 提前退出。

Dim i
i = 1
While i <= 5
    MsgBox i
    i = i + 1
Wend

建议:新代码一律使用 Do…Loop 代替 While…Wend。

5. 循环嵌套

循环可以互相嵌套,常用于处理二维数组或多层文件夹。

示例:九九乘法表

Dim i, j, result

result = "九九乘法表:" & vbCrLf & vbCrLf

For i = 1 To 9
    For j = 1 To i
        result = result & j & "x" & i & "=" & (i*j) & "  "
    Next
    result = result & vbCrLf
Next

MsgBox result

6. 小技巧与注意事项

  • 无限循环风险:确保条件最终会变为假,否则程序卡死(可按 Ctrl+Break 中止)。
  • 性能:For…Next 比 Do…Loop 稍快,优先使用已知次数的循环。
  • Exit For / Exit Do:用于提前跳出循环。
  • 嵌套过多(>3层)建议拆分成子程序,提高可读性。

实用完整示例:批量处理文件(结合 For Each 和条件)

Option Explicit

Dim fso, folder, file, count
count = 0

Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder("C:\Test")

For Each file In folder.Files
    If LCase(fso.GetExtensionName(file.Name)) = "txt" Then
        If file.Size > 102400 Then  ' 大于100KB
            MsgBox "大文件:" & file.Name & " (" & file.Size & " 字节)"
            count = count + 1
        End If
    End If
Next

MsgBox "共找到 " & count & " 个大于100KB的TXT文件"

如果你有具体需求(如遍历递归子文件夹、进度条模拟、循环读取Excel行等),告诉我,我可以提供完整代码!

文章已创建 3511

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部