Command line 获取命令输出参数

Command line 获取命令输出参数,command-line,vbscript,Command Line,Vbscript,我运行一个命令并获得所需的输出,但是从这个输出数据中我需要获得所需的参数值。问题是必需的参数名出现在两个地方,所以我的代码总是返回第二个实例参数值来代替第一个实例。我不知道在VBScript中我们是否可以进行精确匹配 命令输出为: Product Name: DellRack81 Part Number: QAWSX System Board Spare Part Number: 01032-001 从上面的输出中,我想得到“部件号:”值,但代码返回“系统板备件号”的值 现在得到的结果是: P

我运行一个命令并获得所需的输出,但是从这个输出数据中我需要获得所需的参数值。问题是必需的参数名出现在两个地方,所以我的代码总是返回第二个实例参数值来代替第一个实例。我不知道在VBScript中我们是否可以进行精确匹配

命令输出为:

Product Name: DellRack81
Part Number: QAWSX
System Board Spare Part Number: 01032-001
从上面的输出中,我想得到“部件号:”值,但代码返回“系统板备件号”的值

现在得到的结果是:

Product Name    Part Number   System Board Spare Part Number
DellRack81      01032-001     01032-001
我想要的是:

Product Name    Part Number   System Board Spare Part Number
DellRack81      QAWSX         01032-001
你的天真状况

InStr(1,StrTest,"Part Number")  > 0
“零件号”和“系统板备件号”均为真,因此
StrPNo
设置两次。更改条件以检查位置1

更新:

Option Explicit

Dim a : a = Split("Product Name: DellRack81|Part Number: QAWSX|System Board Spare Part Number: 01032-001", "|")
ReDim b(2)
Dim s
For Each s In a
    WScript.Echo s
    If InStr(1, s,"Product Name:") = 1 Then b(0) = UCase(Trim(Mid(s,(InStr(1,s,":",1)+2))))
    If InStr(1, s,"Part Number:") = 1 Then b(1) = UCase(Trim(Mid(s,(InStr(1,s,":",1)+2))))
    If InStr(1, s,"System Board Spare Part Number:") = 1 Then b(2) = UCase(Trim(Mid(s,(InStr(1,s,":",1)+2))))
Next
WScript.Echo Join(b, vbCrLf)
输出:

cscript 39146660.vbs
Product Name: DellRack81
Part Number: QAWSX
System Board Spare Part Number: 01032-001
DELLRACK81
QAWSX
01032-001
(你不应该在工作中使用这种策略)

你的幼稚状态

InStr(1,StrTest,"Part Number")  > 0
“零件号”和“系统板备件号”均为真,因此
StrPNo
设置两次。更改条件以检查位置1

更新:

Option Explicit

Dim a : a = Split("Product Name: DellRack81|Part Number: QAWSX|System Board Spare Part Number: 01032-001", "|")
ReDim b(2)
Dim s
For Each s In a
    WScript.Echo s
    If InStr(1, s,"Product Name:") = 1 Then b(0) = UCase(Trim(Mid(s,(InStr(1,s,":",1)+2))))
    If InStr(1, s,"Part Number:") = 1 Then b(1) = UCase(Trim(Mid(s,(InStr(1,s,":",1)+2))))
    If InStr(1, s,"System Board Spare Part Number:") = 1 Then b(2) = UCase(Trim(Mid(s,(InStr(1,s,":",1)+2))))
Next
WScript.Echo Join(b, vbCrLf)
输出:

cscript 39146660.vbs
Product Name: DellRack81
Part Number: QAWSX
System Board Spare Part Number: 01032-001
DELLRACK81
QAWSX
01032-001
(你不应该在工作中使用这种策略)

此脚本将执行您在
cmdline
变量中添加的命令行

在第一个
零件号:
中,它将显示该行,然后退出循环。它不会显示零件号的第二行

此代码将遍历命令行结果的所有行,但只显示第一个零件号,忽略列表中的另一个零件号。这次无需退出do循环

此脚本将执行您在
cmdline
变量中添加的命令行

在第一个
零件号:
中,它将显示该行,然后退出循环。它不会显示零件号的第二行


此代码将遍历命令行结果的所有行,但它只显示第一个零件号,而忽略列表中的另一个零件号。这次无需退出do循环。

如果要检索三项
零件号
主板备件编号

Set Sh = WScript.CreateObject("WScript.Shell")
cmdLine =  '" type her your command line you want to execute"    
Set oEx = Sh.Exec(cmdLine)
Set oSOut = oEx.StdOut

txt=""
myArray=Array("Product Name","Part Number","System Board Spare Part Number")
Do While Not oSOut.AtEndOfStream
    Line = oSOut.ReadLine
For i=0 To  UBound(myArray)
    If InStr (1,Line,myArray(i),1) > 0 Then
    txt= Line&vbCrLf&txt
    End If 
    Next 
Loop
MsgBox txt

如果您想检索三项
产品名称
零件号
系统板备件号

Set Sh = WScript.CreateObject("WScript.Shell")
cmdLine =  '" type her your command line you want to execute"    
Set oEx = Sh.Exec(cmdLine)
Set oSOut = oEx.StdOut

txt=""
myArray=Array("Product Name","Part Number","System Board Spare Part Number")
Do While Not oSOut.AtEndOfStream
    Line = oSOut.ReadLine
For i=0 To  UBound(myArray)
    If InStr (1,Line,myArray(i),1) > 0 Then
    txt= Line&vbCrLf&txt
    End If 
    Next 
Loop
MsgBox txt

如果您想检索三项
产品名称
零件号
系统板备件号
,请使用这种方式,因为它比另一项更强

Set Sh = WScript.CreateObject("WScript.Shell")
cmdLine = '" type her your command line you want to execute"    
Set oEx = Sh.Exec(cmdLine)
Set oSOut = oEx.StdOut

txt=""
myArray=Array("Product Name","Part Number","System Board Spare Part Number")
Do  Until oSOut.AtEndOfStream
    Line = oSOut.ReadLine   
For i=0  To  UBound(myArray)
A=myArray(i)
L=Len(A)
LF=Left(Trim(Line),L)
 If StrComp(LF,A,1) = 0 Then
    txt= trim(Line) & vbCrLf & txt 
    End If 
 Next
Loop
  MsgBox txt

如果您想检索三项
产品名称
零件号
系统板备件号
,请使用这种方式,因为它比另一项更强

Set Sh = WScript.CreateObject("WScript.Shell")
cmdLine = '" type her your command line you want to execute"    
Set oEx = Sh.Exec(cmdLine)
Set oSOut = oEx.StdOut

txt=""
myArray=Array("Product Name","Part Number","System Board Spare Part Number")
Do  Until oSOut.AtEndOfStream
    Line = oSOut.ReadLine   
For i=0  To  UBound(myArray)
A=myArray(i)
L=Len(A)
LF=Left(Trim(Line),L)
 If StrComp(LF,A,1) = 0 Then
    txt= trim(Line) & vbCrLf & txt 
    End If 
 Next
Loop
  MsgBox txt

运气不好。我试过你的建议,但我还是坚持了。InStr(1,StrTest,“零件号”)>1这不是运气的问题。对不起,Ekkehard,我还是不能。您能解释/显示我需要在哪里更改位置1吗?因为我无法确定它。@Prime,它不是
>1
。“零件号:”的位置必须是
=1
,因此请改为尝试:
InStr(1,StrTest,“零件号”)=1
@Victor,我尝试了=1,但仍然没有获得第一个零件号所需的值。运气不好。我试过你的建议,但我还是坚持了。InStr(1,StrTest,“零件号”)>1这不是运气的问题。对不起,Ekkehard,我还是不能。您能解释/显示我需要在哪里更改位置1吗?因为我无法确定它。@Prime,它不是
>1
。“零件号:”的位置必须是
=1
,因此请改为尝试:
InStr(1,StrTest,“零件号”)=1
@Victor,我尝试了=1,但仍然没有获得第一个零件号所需的值。运行此(51,37)Microsoft VBScript编译错误:预期的语句结束运行此操作时我收到错误(51,37)Microsoft VBScript编译错误:预期语句结束,但绿巨人想要“系统板备件号:”键的01032-001值。看看代码,绿巨人在之前删除了一些修订。我从他写的内容中了解到,他想要这个“零件号:QAWSX”第二行他不想要第二行。如果他想要第二行,没有任何问题,他只需在条件声明中的第一个脚本“零件号:”中替换为“系统板备件号:”。在第二个脚本中,他将在条件声明中的左侧(第12行)替换为中间(第20,12行),但绿巨人想要第二行的01032-001值“系统板备件号:”键。看看代码,绿巨人在之前删除了一些修订。我从他写的内容中了解到,他想要这个“零件号:QAWSX”行,他不想要第二个。如果他想要第二个,没有任何问题,他只需在第一个脚本中替换“零件号:”在条件声明中使用”系统板备件号:“。在第二个脚本中,他将在状态声明左侧(第12行)中替换为中间(第20,12行)