2016-10-26 3 views
0

Я закодировал следующий сценарий в надежде, что скрипт получит информацию из файлов в папке и суммирует их в новый файл. Когда я пытаюсь запустить этот скрипт, я получаю сообщение об ошибке (код: 800A1A8, строка: 53) «Требуемый объект:« objReadFiles », но когда я вставляю« objReadFiles »выше строки 53, я получаю сообщение об ошибке« Тип несоответствия: objReadFiles '"(код: 800A000D). Новый файл также не содержит содержимого.Файл создается, но скрипт в файле

'Create new output file 
Set objFile = objFSO.CreateTextFile("M:\vbscripts\folder\TEST RUN\Summary.txt") 


'Read through folder 
Set objFolder = objFSO.GetFolder("M:\vbscripts\folder\TEST RUN\COMP") 
Set colFiles = objFolder.Files 


'Get information and write it in file 
For Each objFiles in colFiles 
    strName = objFiles.Name 
    num = len(strName) - 13 
    string_part = left(strName, num) 
    datetime = CDATE(objReadFiles.DateLastModified) 
    Do While objReadFile.AtEndOfStream <> True 
     contents = objReadFile.ReadLine 
     If Not InStr(contents, "INSTALLED SOFTWARE") > 0 AND InStr(contents, " ") > 0 then 
      objFile.Write string_part & "," & datetime & "," & contents & vbCRLF 
     End If 
    Loop 
Next 


'Write result into new output file 
objFile.Write "end of file" 
+1

Привет, Багги, в вашем примере нет линии 53. Использование вами varnames вводит в заблуждение. Эрор сам объясняет, что объект требуется, но не установлен. Для новичков 'option explicit', который заставляет вас затушить новые введенные переменные, может оказаться полезным. 'Для каждого objFiles в colFiles' имеет множественное число для одного объекта - единственное objFile имеет другое использование. – LotPings

ответ

0

Не знаю, что я сделал, чтобы исправить это, но, похоже, это работало сегодня утром. Просто хотел поделиться своим окончательным сценарием:

Dim objFSO, objFolder, objFile, colFiles 

'Format time stamp for YYYYMMDD_HHMM 
strDay = Day(now) 
If Len(strDay) < 2 Then 
    strDay = "0" & strDay 
End If 

strMonth = Month(now) 
If Len(strMonth) < 2 Then 
    strMonth = "0" & strMonth 
End If 

strYear = Year(now) 

strHour = Hour(now) 
If Len(strHour) < 2 Then 
    strHour = "0" & strHour 
End If 

strMinute = Minute(now) 
If Len(strMinute) < 2 Then 
    strMinute = "0" & strMinute 
End If 

Formated_Stamp = strYear & strMonth & strDay & "_" & strHour & strMinute 


Set objFSO = CreateObject("Scripting.FileSystemObject") 

'Rename old file 
If objFSO.FileExists ("M:\vbscripts\folder\TEST\summary.txt") Then 
    objFSO.MoveFile "M:\vbscripts\folder\TEST\summary.txt", "M:\vbscripts\folder\TEST\Old\summary_" & Formated_Stamp & ".txt" 
End If 

'Read through folder 
Set objFolder = objFSO.GetFolder("M:\vbscripts\folder\TEST\COMP") 
Set colFiles = objFolder.Files 

'Create new output file 
Set objFile = objFSO.CreateTextFile("M:\vbscripts\folder\TEST\summary.txt") 

'Get information and write it in file 
For Each objFiles in colFiles 
    Set objReadFile = objFSO.OpenTextFile(objFiles) 
    Do While objReadFile.AtEndOfStream <> True 
     contents = objReadFile.ReadLine 
     If Not InStr(contents, "INSTALLED SOFTWARE") > 0 AND InStr(contents, " ") > 0 then 
      datetime = CDATE(objFiles.DateLastModified) 
      strName = objFiles.Name 
      num = len(strName) - 13 
      string_part = left(strName, num) 
      objFile.Write string_part & ", " & datetime & ", " & contents & vbCRLF 
     End If 
    Loop 
Next 

objFile.Write "End of file." 

Wscript.Echo "File has been created." 
+0

Первая строка в вашем цикле 'For' не существует в вашем первом скрипте:' set objReadFile = objFSO.OpenTextFile (objFiles) ' – langstrom

+0

На этот раз вы не забыли открыть файл. Btw Я думаю, что «Do While While objReadFile.AtEndOfStream» легче читать. – LotPings

1

Переименуйте свои varaiables, чтобы было ясно, что вы делаете.

Я подозреваю, что вы пытаетесь:

  • Создать выходной файл
  • процесса все файлы в каталоге и читать каждый файл ищет текст
  • Записать в выходной файл на основе некоторого условия

Этот код должен работать немного лучше:

'Create new output file 
Set objOutputFile = objFSO.CreateTextFile("M:\vbscripts\folder\TEST RUN\Summary.txt") 

'Read through folder 
Set objFolder = objFSO.GetFolder("c:\temp\batches\archive") 

'Get information and write it in file 
For Each objFile in objFolder.Files 
    num = len(objFile.name) - 13 
    string_part = left(objFile.name, num) 
    datetime = CDATE(objFile.DateLastModified) 

    set objReadStream = objFile.OpenAsTextStream() 

    Do While objReadStream.AtEndOfStream <> True 
     contents = objReadStream.ReadLine 
     If Not InStr(contents, "INSTALLED SOFTWARE") > 0 AND InStr(contents, " ") > 0 then 
      objOutputFile.Write string_part & "," & datetime & "," & contents & vbCRLF 
     End If 
    Loop 

    objReadStream.Close() 
Next 

objOutputFile.Close() 
Смежные вопросы