2013-10-29 27 views
0

我有一個程序給我如下輸出。找到文本並分配給VBscript的變量

Listing 3 device(s) for setup class "Ports" (Ports (COM & LPT)). 
USB\VID_067B&PID_2303\5&164808BA&0&3      : Prolific USB-to-Serial Comm Port (COM3) 
USB\VID_068B&PID_2304\5&164808BA&0&3      : Prolific USB-to-Serial Comm Port (COM4) 
USB\VID_069B&PID_2305\5&164808BA&0&3      : Prolific USB-to-Serial Comm Port (COM6) 

我想出來獲得COM#值,並使用VBScript 其分配給一個變量,像這樣

P1=COM3 
P2=COM4 
P3=COM6 

人物角色此鏈接http://vbcity.com/forums/t/154919.aspx越來越我想用行輸出。

System.IO.Ports.SerialPort.GetPortNames 

但我不知道如何在我的腳本中實現這個。

謝謝

回答

1

我把你的輸出,並在名爲OUTPUT.TXT的文本文件保存它,所以我使用運行它的命令是:

TYPE OUTPUT.TXT 

然而,隨時與您的實際更換TYPE OUTPUT.TXT程序。以下VBScript顯示如何運行此命令並捕獲並解析VBScript中的輸出。我用INSTRMID定位並提取我需要的字符串:

Dim objShell 
Set objShell = CreateObject("WScript.Shell") 
Dim objExec 
Set objExec = objShell.Exec("CMD /C TYPE OUTPUT.TXT") 
Dim lines 
lines = objExec.StdOut.ReadAll 
Dim line 
Dim P(10) 
Dim num 
num = 0 
For Each line in split(lines, vbCrLf) 
    Dim idx 
    idx = InStr(line, "Prolific USB-to-Serial Comm Port (") 
    If idx > 0 Then 
    idx = idx + 34 
    Dim idx2 
    idx2 = InStr(idx, line, ")") 
    num = num + 1 
    P(num) = Mid(line, idx, idx2 - idx) 
    WScript.Echo "P" & num & "=" & P(num) 
    End If 
Next 
+0

這似乎工作,我必須等到我回家後,看看它是否可以與多個選項一起使用。出於好奇,使用Dim來記錄VBscript中的一個變量。我讀過你想要這樣做,但是如果我不這樣做,就不會注意到有什麼區別。似乎它只是增加了劇本的混亂。 – jeffpkamp

+0

'DIM'意思是維度,歷史上用於在'BASIC'中聲明數組的大小。但是,它已被重新用於聲明任何變量。這只是一個良好實踐的問題,但是'VBScript'默認不會強制執行這種做法。一般來說,在編寫腳本時,應該使用OPTION EXPLICIT來強制執行此行爲。這將陷入錯別字。例如,在我寫的腳本中,如果我誤解了我的任何變量,腳本就會錯誤地運行,而不會引發錯誤。 –

+0

因此,這主要是工作,問題是我需要生成一個變量來饋送到腳本的其餘部分,因此,而不是有一個消息框與P1 = COM1,P2 = COM2,我需要它寫入變量P1 = COM1。我看到我不能把P(num)= PORT然後在循環之後提取這個。 – jeffpkamp

0

我在這裏看到了您的其他問題。您應該能夠從Win32_SerialPort類的WMI中獲取此信息。這有幫助嗎?

On Error Resume Next 

strComputer = "." 

Set objWMIService = GetObject("winmgmts://" & strComputer & "/root/CIMV2") 
Set colInstances = objWMIService.ExecQuery("SELECT * FROM Win32_SerialPort") 

If colInstances.Count = 1 Then 
    WScript.Echo "1 instance:" & vbCrLf 
Else 
    WScript.Echo colInstances.Count & " instances:" & vbCrLf 
End If 

For Each objInstance In colInstances 
    WScript.Echo "Availability    : " & objInstance.Availability 
    WScript.Echo "Binary      : " & objInstance.Binary 
    WScript.Echo "Capabilities    : " & Join(objInstance.Capabilities, ",") 
    WScript.Echo "CapabilityDescriptions  : " & Join(objInstance.CapabilityDescriptions, ",") 
    WScript.Echo "Caption      : " & objInstance.Caption 
    WScript.Echo "Description     : " & objInstance.Description 
    WScript.Echo "DeviceID     : " & objInstance.DeviceID 
    WScript.Echo "Name      : " & objInstance.Name 
    WScript.Echo "PNPDeviceID     : " & objInstance.PNPDeviceID 
    WScript.Echo "ProviderType    : " & objInstance.ProviderType 
    WScript.Echo 
Next 
+0

這個腳本出現0的情況。我認爲問題可能是串口實際上是一個USB>串口適配器,所以它可能不會被列在WIN32_serialport下。 – jeffpkamp

相關問題