如何在VBScript中运行与循环相关的文本?

时间:2018-05-21 08:09:25

标签: vbscript

我知道如何在VBScript中使用For循环来执行算术或任何数学运算。有人可以解释如何在VBScript中使用For循环字符串吗?

例如:

我有一个名为files_list.txt的文件,其中包含一组文字。我使用以下代码使用For循环使用If..Else操作打印某些文本。

Set objFSO = CreateObject("Scripting.FileSystemObject")

Dim file, filegroup

Set objfile = objFSO.openTextFile("D:\Users\krkarthi\Desktop\files_list.txt")

filegroup = objfile.ReadAll

For Each file In filegroup
    If objFSO.FileExists(file) = True Then
        result = WScript.Echo(Now & " The file &file exists")
    Else 
        result = WScript.Echo(Now & " The file &file do not exists")
    End If

根据上面的代码,我已经复制了files_list.txt中要监视的所有文件路径。通过使用For循环,我想使用objFSO.FileExists()语句检查特定文件是否存在。但遗憾的是,由于某些问题,代码无法执行。有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

您正在使用ReadAll方法,然后尝试逐行迭代返回的结果。这不起作用,因为ReadAll将整个文件内容作为单个字符串返回(不是像您期望的那样的字符串数组)

为了遍历字符串的行,您需要先拆分它:

Dim lines, line
lines = Split(filegroup, vbNewLine)
For Each line In lines
    ' ...
Next

那将会奏效。但是,这不是迭代文本文件行的最佳方式(特别是对于大文件),更不用说担心使用了哪种EOL字符。

幸运的是,还有另一个名为ReadLine的方法,您可以使用该方法直接从文本文件中读取一行。在这种情况下,您需要使用Do循环而不是For循环:

Set objFSO = CreateObject("Scripting.FileSystemObject")

Set objFile = objFSO.openTextFile("The\path\to\your\file.txt")

Dim currentLine
Do Until objFile.AtEndOfStream
    currentLine = objFile.ReadLine
    If objFSO.FileExists(currentLine) Then
        ' ...
    Else 
        ' ...
    End If
Loop