【问题标题】:Read a line from several .txt files and write them into created file从几个 .txt 文件中读取一行并将它们写入创建的文件
【发布时间】:2016-03-18 07:12:12
【问题描述】:

我有一个非常简单的任务。

有一个文件夹包含多个具有不同扩展名的文件。我需要制作一个脚本,它会在这个文件夹中找到所有扩展名为 .txt 的文件,从每个文件中读取第一行,然后将所有第一行写入新创建的文件中。

现在,我得到了这样的结果:

Option Explicit
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim f, colFiles , objFile
Dim tFolder, tFile
Dim lineToCopy, fileContents
Dim input, output

Set tFolder = fso.GetFolder("C:\Temp")
Set tFile = tFolder.CreateTextFile("test.txt", true) 

Set f = fso.GetFolder("D:\Folder")
Set colFiles = f.Files
    For Each objFile in colFiles
        If LCase(fso.GetExtensionName(objFile.name)) = "txt" Then
            Set input = fso.OpenTextFile(LCase(objFile.name))
            If Not input.AtEndofStream Then lineToCopy = input.ReadLine
            input.close
            output = fso.OpenTextFile(tFolder, True)
            output.WriteLine lineToCopy
            output.close
        End If
    Next

WScript.sleep 60000000

激活后,.vbs 文件告诉我他无法从该行找到文件:

Set input = fso.OpenTextFile(LCase(objFile.name))

我想这是因为 IF LCASE<...> 块不将文件夹内容理解为 .txt 文件。我哪里错了,需要做些什么来解决这个问题?

您好, 理查德

【问题讨论】:

    标签: vbscript


    【解决方案1】:

    为 OpenTextFile 使用文件的完整 .Path 或通过 OpenAsTextStream 获取流。使用 tFile 而不是重复创建输出。删除所有风险/货物崇拜脂肪:

    Option Explicit
    
    Dim fso   : Set fso = CreateObject("Scripting.FileSystemObject")
    Dim tFile : Set tFile = fso.CreateTextFile(fso.BuildPath(".\", "test.txt"))
    Dim oFile
    
    For Each oFile in fso.GetFolder("..\data").Files
        If LCase(fso.GetExtensionName(oFile.Path)) = "txt" Then
    '      Dim input: Set input = fso.OpenTextFile(LCase(oFile.Path))
           Dim input: Set input = oFile.OpenAsTextStream()
           If Not input.AtEndofStream Then tFile.WriteLine input.ReadLine()
           input.Close
        End If
    Next
    
    tFile.Close
    

    【讨论】:

      【解决方案2】:

      看来我已经找到了自己的决定:

      Option Explicit
      Dim fso
      Set fso = CreateObject("Scripting.FileSystemObject")
      
      Dim f, colFiles , objFile
      Dim tFolder, tFile
      Dim lineToCopy, readFile
      
      Set tFolder = fso.GetFolder("C:\Temp")
      Set tFile = tFolder.CreateTextFile("test.txt", true) 
      
      Set f = fso.GetFolder("D:\Scripting Games 2008\Beginner")
      Set colFiles = f.Files
          For Each objFile in colFiles
              If LCase(fso.GetExtensionName(objFile.name)) = "txt" Then
              REM Preceding passage finds all .txt files in selected folder
                  Set readFile = objFile.OpenAsTextStream
                  lineToCopy = ""
                      Do Until lineToCopy <> "" Or readfile.atEndOfStream
                          lineToCopy = Trim(readFile.ReadLine)
                      Loop
                      REM Extracts first line of the text, if it is not empty
                  tFile.WriteLine objFile.name & ": " & lineToCopy
              End If
          Next
      

      仍然,感谢您的回答。我发现了一些有趣的解决方案,这些解决方案在一段时间内很有用。

      您好, 理查德

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-27
        • 2016-06-18
        • 2015-06-26
        • 1970-01-01
        • 2020-11-23
        • 1970-01-01
        相关资源
        最近更新 更多