Я использую Zbarimg, который (я считаю) выводит свои данные в STDOUT. Таким образом, в настоящее время строка cmd в VBScript выполняет команду и сохраняет ее в переменной, таким образом:

xml_data=objShell.Exec("C:\MobiEvent\Zbar\bin\zbarimg -D -q --xml C:\MobiEvent\AllPics\*.jpg").stdout.readall

(Для непосвященных -D останавливает отображение изображения штрих-кода, считываемого из изображения, и -q хранит все в тайне, поэтому выводятся только данные XML). Все это хорошо работает, когда все данные AllPics хранятся в xml_data. Проблема, как всегда, в консоли всплывает окно, которое остается открытым во время работы скрипта. И с 200+ фотографиями, он остается открытым некоторое время

В качестве альтернативы можно использовать команду «Выполнить» и пометить «, 0, False» в конце ... но, конечно же, выходные данные StdOut не собираются для последующей обработки!

Я спрашиваю себя, возможно ли объединить их, используя конвейер, мой ТЕОРЕТИЧЕСКИЙ синтаксис ...

objShell.Run("C:\MobiEvent\Zbar\bin\zbarimg -D -q --xml C:\MobiEvent\AllPics\*.jpg"|to other script),0,True

** Даже не уверен, что программа сделает это, так как может прочитать канал как часть пути к каталогу.

Который тогда напрашивается на следующий вопрос. Если это возможно, можно передать STDOUT, как мне прочитать этот вывод по конвейеру обратно во вторую программу VBScript? (Все, что мне нужно сделать, это получить выходные данные программы для распечатки в файл, чтобы я мог опубликовать процесс, снова прочитав и разделив его на составные части, чтобы получить имя файла фотографии и значение QR)

Я знаю, что эта дискуссия "Run = скрыть окно / Exec = не могу скрыть" бушевала некоторое время. Просто подумал, что вышеприведенное МОЖЕТ доказать альтернативный вариант.

1 ответ1

0

Я понятия не имею о вашем конкретном программном обеспечении, но вы можете транслировать и перенаправлять в vbScript, используя.Команда запуска. Например:

' demonstrate piping and redirecting output with .Run
Set objShell = WScript.CreateObject("WScript.Shell")
Set objFSO = CreateObject("Scripting.FileSystemObject")
strTemp=objShell.ExpandEnvironmentStrings("%TEMP%") & "\"
strCmd=objShell.ExpandEnvironmentStrings("%comspec%") & " /C"

' here is the action
objShell.Run strCmd & "echo hello and welcome|findstr /N welcome >" & strTemp & "test.txt",0, True

' read the file back to show it was created successfully
Set file = objFSO.OpenTextFile(strTemp & "test.txt", 1)
strTaskText = file.ReadAll
strTaskText=Left(strTaskText,Len(strTaskText)-2) ' remove trailing vbCrLf
file.Close

MsgBox "The output was:" & vbcrlf & strTaskText

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .