2016-10-26 4 views
0

폴더의 파일에서 정보를 얻고 새로 만든 파일에 스크립트를 요약하기 위해 다음 스크립트를 코딩했습니다. 이 스크립트를 실행하려고하면 "Object required : 'objReadFiles'"라는 오류 (코드 : 800A1A8, 줄 : 53)가 표시되지만 53 행 위에 'objReadFiles'를 삽입하면 "유형 불일치 : '라는 오류가 발생합니다. 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

안녕하세요. 버기는 예제에 없습니다. 귀하의 varnames 사용은 오도 된 것입니다. eroror는 개체가 필요하지만 설정되지 않았 음을 설명합니다. 초보자를 위해 새로 도입 된 변수를 흐리게 만드는'option explicit' 옵션이 도움이 될 수 있습니다. 'For each objFiles in 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 Not 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() 
관련 문제