2013-12-13 3 views
1

단일 컴퓨터 스크립트를 대량 사용 스크립트로 변환하려고합니다. 그것이 의미하는 바는 텍스트 파일에서 끌어 와서 제거 할 Windows Essentials 부분을 선택할 수있게하는 것입니다. 그러나, 그것이 앉아서, 그것은 단지 하나의 컴퓨터 이름에 대해 묻습니다 ... 나는 그것이 Computer_Names.txt를 만든 별도의 텍스트 파일에서 끌어와 그 목록에있는 모든 컴퓨터에서 제거를 실행합니다. 나는 그걸 올바르게 이해할 수없는 것 같습니다.VBS에서 텍스트 파일을 읽는 방법?

Const ForReading = 1 
strComputer = InputBox("Enter the Computer Name:- ") 

Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objTextFile = objFSO.OpenTextFile ("C:\Windows_Live_Components.txt", ForReading) 
Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 


StrOutput = "Uninstalled the following Software:- " 
Do Until objTextFile.AtEndOfStream 
strNextLine = objTextFile.Readline 
arrSoftwareList = Split(strNextLine , ",") 
Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product Where Name = " & Chr(34) & arrSoftwareList(0) & Chr(34)) 
For Each objSoftware in colSoftware 
    objSoftware.Uninstall() 
    strOutput = stroutput & vbCrLf & objsoftware.Name 
Next 
Loop 
WScript.Echo strOutput 

Computer_Names.txt 파일의 내용은 다음과 같습니다. 각 컴퓨터는 별도의 텍스트 줄에 있습니다.

LAPD2712 
LAPD2812 

모든 컴퓨터 이름은 대문자 4 자, 숫자 4 개입니다.

+0

텍스트 파일의 내용을 게시하십시오. –

+0

게시 할 메인 포스트를 편집했습니다. – user3100777

답변

0

은 당신이 뭔가를 할 수 있습니다 :

Dim objFSO, objComponentsTextFile, objComputersTextFile, objWMIService, strComputer, StrOutput 
Dim computerArray(), softwareArray, x 
x = 0 
Redim computerArray(x) 


Set objFSO = CreateObject("Scripting.FileSystemObject") 
Set objComponentsTextFile = objFSO.OpenTextFile ("C:\Windows_Live_Components.txt", 1) 
Set objComputersTextFile = objFSO.OpenTextFile ("C:\Computers.txt", 1) 

Do Until objComputersTextFile.AtEndOfStream 
    computerArray(x) = objComputersTextFile.ReadLine 
    x = x + 1 
    Redim Preserve computerArray(x) 
Loop 

x = 0 

softwareArray = Split(objComponentsTextFile.ReadLine, ",") 

For Each computer in computerArray 
    Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & computer & "\root\cimv2") 
    StrOutput = "Uninstalled the following Software:- " 
    For Each software in softwareArray 
     Set colSoftware = objWMIService.ExecQuery ("Select * from Win32_Product Where Name = " & Chr(34) & software & Chr(34)) 
     objSoftware.Uninstall() 
     strOutput = strOutput & vbCrLf & objsoftware.Name 
    Next 
    WScript.Echo strOutput 
Next 

이는 배열로 텍스트 파일에서 데이터를로드 배열에 반복합니다. 나는 당신이 이전에 텍스트 스트림이 AtTheEndOfStream에 도착하고 앞뒤로 갈 필요가 없다고 생각합니다. 그러면 첫 번째 컴퓨터 만 처리하는 이유가 설명됩니다.

+0

맞습니다. 입력 상자를 없애고 싶습니다. 그러나 Computer_Names에서 첫 번째 줄을 가져 와서 제거를 통해 실행 한 다음 다음 줄을 가져 와서 끝까지 실행할 수는 없습니다. – user3100777

+0

줄을 가져 오는 중 5, char 1. 프로 시저 호출이나 인수가 잘못되었습니다. 너무 골치 덩어리면 걱정하지 마라. 필자는 자신의 코딩 기술이 매우 초보적이기 때문에 내가 바라는 것보다 좀 더 수동적으로 끝내기 쉽다. – user3100777

+0

ForReading 상수가 내 스니핑에 정의되지 않았습니다. 대신 1로 변경되었습니다. 일해야한다. ATM을 설치하고자하는 소프트웨어가 없기 때문에 여기에서 완전히 재현 할 수는 없습니다. –

관련 문제