用vbs搜索数组

时间:2012-05-30 19:20:42

标签: vbscript

我正在尝试在阵列中搜索打印机,如果打印机存在则在HTA中显示名称。该位工作正常,但如果阵列中未找到任何打印机,则会显示设备上所有已安装的打印机。有没有办法只显示找到的打印机

Set objFSO = CreateObject("Scripting.FileSystemObject")
arrPrinters = Split(objFSO.OpenTextFile("C:\Windows\DEW\denied-printers.txt" ,ForReading).ReadAll(), VbCrLf)

Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

Set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
For Each objPrinter in colInstalledPrinters
    localprinter = objPrinter.Name
    For Each strLine in arrPrinters
        If inStr(localprinter,strLine) > 0 Then 
            strHTML = strHTML & "<tr><td>" & localprinter & "</td></tr>"
    End If 
Next
Next

2 个答案:

答案 0 :(得分:1)

试试这个

If inStr(localprinter,strLine) > 0 OR inStr(localprinter,strLine) = NULL Then 

End If

问题是如果数组为空,strline为NULL,当你在inStr中使用它时,它返回NULL而不是'0'。这是一种可能性 - 在3分钟之前编辑了tunmise fasipe

答案 1 :(得分:0)

你的主要问题 - 我想在不知道yoyr文件的内容的情况下 - 是在instr(textToSearch,searchString)中你切换了两个参数。 无论如何,这里是我测试的代码版本。

const ForReading = 1
strComputer = "."
set objFSO = createObject("Scripting.FileSystemObject")
printers = objFSO.OpenTextFile("denied-printers.txt" ,ForReading).ReadAll()
set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
for Each objPrinter in colInstalledPrinters
   localprinter = objPrinter.Name
   if instr(printers, localprinter) then
     strHTML = strHTML & "<tr><td>" & localprinter & "</td></tr>"
   end if
next

编辑:这里是独立的vbscript版本,将其保存为.vbs文件并运行测试

on error resume next
const ForReading = 1 
strComputer = "." 
file = "denied-printers.txt"
set objFSO = createObject("Scripting.FileSystemObject")
set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer")
if err.number=0 then
  printers = objFSO.OpenTextFile(file ,ForReading).ReadAll()
  if err.number=0 then
    set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
    set colInstalledPrinters =  objWMIService.ExecQuery("Select * from Win32_Printer") 
    for Each objPrinter in colInstalledPrinters 
       localprinter = objPrinter.Name 
       if instr(printers, localprinter) then 
         wscript.echo localprinter & " found in " & file
       end if 
    next 
  else
    wscript.echo "file " & file & " not found, showing all printers"
    for Each objPrinter in colInstalledPrinters 
      wscript.echo objPrinter.Name
    next 
  end if
else
  wscript.echo "Error" & err.description
end if