VBScript从txt文件和列表中读取多个文件名,这些文件名在目录中不存在

时间:2014-01-28 01:52:49

标签: arrays vbscript type-mismatch fso

我是VB脚本的新手,我正试图找到一种方法:

  1. 读取在特定文本文件中写为文本行的文件名列表。
  2. 检查这些文件是否与脚本位于同一目录中。
  3. 将不存在的文件的名称写入输出文件(missing.txt)
  4. 根据我的研究,似乎一个好的方法是使用FSO并读取整个文本文件,创建一个数组,然后循环检查文件是否存在于目录中,然后记录到“missing.txt” “如果没有。

    但是,这样做,不会出现类型不匹配,因为.txt中的文件名是一个字符串,目录中的文件本身就是对象吗?

    我该怎么比较呢?我可以从概念上理解这一点,但我不知道从哪里开始使用语法。

    感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

正如你所说,你是vbscript的新手,而你似乎是Stack Overflow的新手,我想我会尽力为你提供帮助。

您无需将整个文件存储为数组。您需要做的就是逐行处理输入文件作为文本:检查每行文本是否作为文件名存在。

让我们假设我们的例子有以下细节:

filelist.txt {将包含要查找的文件列表的文件}

file1.txt
file2.txt
file3.txt
file7.txt

目录列表{您将从}

运行脚本的文件夹
 Directory of C:\lazy-code-handed-over-on-silver-plate\files

 06/06/6666  06:66 PM    <DIR>          .
 06/06/6666  06:66 PM    <DIR>          ..
 06/06/6666  06:66 PM               666 file1.txt
 06/06/6666  06:66 PM               666 file2.txt
 06/06/6666  06:66 PM               666 file4.txt
 06/06/6666  06:66 PM               666 file5.txt
               4 File(s)           2664 bytes
               2 Dir(s)   6,666,666,666,666 bytes free

我们的例子

filelist.txt文件包含file1.txt file2.txt file3.txt file7.txt

目录包含file3.txtfile7.txt

基于这些参数,我们对此脚本的预期输出如下:

missing.txt {列出缺失文件的结果输出文件}

file3.txt
file7.txt

脚本

这是一个帮助您实现此目标的脚本(我在每个相关行的最右侧添加了注释):

Option Explicit                                                               ' .. Just coz.
Const forReading = 1                                                          ' Set our constants for later.
Const forWriting = 2                                                          ' ....

Dim inputFile, outputFile, fso, fileList, logFile, fileSpec                   ' Dimension our variables

inputFile = "filelist.txt"                                                    ' Our input file
outputFile = "missing.txt"                                                    ' Our output file

Set fso = CreateObject("Scripting.FileSystemObject")                          ' Set up fso
Set fileList = fso.OpenTextFile(inputFile, forReading)                        ' Open our input file for reading
If Not (fso.FileExists(outputFile)) Then fso.CreateTextFile(outputfile)       ' Create output file if it doesn't exist
Set logFile = fso.OpenTextFile(outputFile, forWriting)                        ' Open up our output file for writing later

Do while not fileList.AtEndOfStream                                           ' While we have lines to process do this loop
    fileSpec = fileList.ReadLine()                                            ' Read in line of text as variable fileSpec
    If Not (fso.FileExists(fileSpec)) Then                                    ' If it doesnt exist ....
        logFile.writeline (fileSpec)                                          ' ....Write it out to the output file
    End If 
Loop

fileList.close                                                                ' Clean up
logFile.close                                                                 ' ..

我希望这会对你有所帮助。祝你今天愉快。 :)