VBS для возврата части командной строки возвращают с помощью RegEx - PullRequest
1 голос
/ 17 декабря 2011

Я пытаюсь выполнить команду через ssh, взять только первую часть возвращенной команды и установить ее в качестве переменной, которая будет использоваться. Я пытаюсь использовать RegExp и, так как мне нужны только первые 4 цифры, я использую код шаблона "^ \ d {1,4}", я могу успешно получить весь возврат с помощью этого кода;

Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec ("ssh -un -pw command")
      Do Until oExec.StdOut.AtEndOfStream
         ID = oExec.StdOut.ReadLine
      Loop
       WScript.Echo ID

Но теперь, когда я пытаюсь использовать RegExp и echo, чтобы увидеть, получаю ли я то, что хочу, я получаю ошибку "Несоответствие типов"

Set RegExp = New RegExp
Set WshShell = CreateObject("WScript.Shell")
Set oExec = WshShell.Exec ("ssh -un -pw command")
RegExp.Pattern = "^\d{1,4}"
      Do Until oExec.StdOut.AtEndOfStream
         ID = oExec.StdOut.ReadLine
          WScript.Echo RegExp.execute(ID)
      Loop

Если у кого-нибудь есть какие-либо обвинения в том, что не так с кодом, пожалуйста, дайте мне знать. Если вы знаете какую-либо альтернативу, я буду признателен. Используя скрипт оболочки, я могу получить то, что ищу, но мне нужно запустить этот VBS с Windows. Вот скрипт Shell, если кто-нибудь может перевести его на VBS.

.............for i in `command | sed ‘1d’ | awk ‘{print $1}’`..............

Заранее признателен за любую помощь ... Я какое-то время ломал голову над этим и сгорал.

1 Ответ

0 голосов
/ 17 декабря 2011

Вы не можете .Echo объект как коллекция совпадений, которую вы получаете из .Execute; получить доступ к. Значение его первого элемента:

>> sInp = "1234xxx"
>> Set reHead = New RegExp
>> reHead.Pattern = "^\d{4}"
>> Set oMTS = reHead.Execute(sInp)
>> WScript.Echo oMTS(0).Value
>>
1234
>> WScript.Echo oMTS
>>
Error Number:       13
Error Description:  Type mismatch
...