Запуск командной строки молча с помощью VbScript и получение вывода?

Я хочу иметь возможность запускать программу через командную строку, и я хочу запустить ее с помощью VbScript. Я также хочу получить выход из командной строки и назначить ее переменной, и я хочу, чтобы все это было сделано без каких-либо всплывающих окон. Я обошёл две вещи отдельно, но не вместе. Вот что я получил до сих пор. Выполните команду из cmd и получите выход:

Dim WshShell, oExec Set WshShell = WScript.CreateObject("WScript.Shell") Set oExec = WshShell.Exec("C:\snmpget -c public -v 2c 10.1.1.2 .1.3.6.1.4.1.6798.3.1.1.1.5.1") x = oExec.StdOut.ReadLine Wscript.Echo x 

Вышеупомянутый скрипт работает и делает то, что я хочу, за исключением того, что cmd появляется на короткое время.

Вот сценарий, который будет запускаться беззвучно, но не будет захватывать вывод

 Set WshShell = WScript.CreateObject("WScript.Shell") Return = WshShell.Run("C:\snmpset -c public -v 2c -t 0 10.1.1.2 .1.3.6.1.4.1.6798.3.1.1.1.7.1 i 1", 0, true) 

Есть ли способ заставить этих двух работать вместе?

Позвольте мне рассказать вам, почему я хочу сделать это. Я в основном опросу блока каждые 5-10 минут, и я собираюсь получить сценарий для отправки по электронной почте или бросить окно сообщения при возникновении определенного условия, но я не хочу, чтобы на моем компьютере весь день отображалась линия cmd. Какие-либо предложения? благодаря

Вы можете перенаправить вывод в файл, а затем прочитать файл:

 return = WshShell.Run("cmd /c C:\snmpset -c ... > c:\temp\output.txt", 0, true) Set fso = CreateObject("Scripting.FileSystemObject") Set file = fso.OpenTextFile("c:\temp\output.txt", 1) text = file.ReadAll file.Close 

Я принял этот и другие комментарии и создал более сложную функцию для запуска приложения и получения вывода.

Пример для функции вызова: выведет список DIR списка C: \ только для каталогов. Результат будет возвращен переменной CommandResults, а также останется в C: \ OUTPUT.TXT.

 CommandResults = vFn_Sys_Run_CommandOutput("CMD.EXE /C DIR C:\ /AD",1,1,"C:\OUTPUT.TXT",0,1) 

функция

 Function vFn_Sys_Run_CommandOutput (Command, Wait, Show, OutToFile, DeleteOutput, NoQuotes) 'Run Command similar to the command prompt, for Wait use 1 or 0. Output returned and 'stored in a file. 'Command = The command line instruction you wish to run. 'Wait = 1/0; 1 will wait for the command to finish before continuing. 'Show = 1/0; 1 will show for the command window. 'OutToFile = The file you wish to have the output recorded to. 'DeleteOutput = 1/0; 1 deletes the output file. Output is still returned to variable. 'NoQuotes = 1/0; 1 will skip wrapping the command with quotes, some commands wont work ' if you wrap them in quotes. '---------------------------------------------------------------------------------------- On Error Resume Next 'On Error Goto 0 Set f_objShell = CreateObject("Wscript.Shell") Set f_objFso = CreateObject("Scripting.FileSystemObject") Const ForReading = 1, ForWriting = 2, ForAppending = 8 'VARIABLES If OutToFile = "" Then OutToFile = "TEMP.TXT" tCommand = Command If Left(Command,1)<>"""" And NoQuotes <> 1 Then tCommand = """" & Command & """" tOutToFile = OutToFile If Left(OutToFile,1)<>"""" Then tOutToFile = """" & OutToFile & """" If Wait = 1 Then tWait = True If Wait <> 1 Then tWait = False If Show = 1 Then tShow = 1 If Show <> 1 Then tShow = 0 'RUN PROGRAM f_objShell.Run tCommand & ">" & tOutToFile, tShow, tWait 'READ OUTPUT FOR RETURN Set f_objFile = f_objFso.OpenTextFile(OutToFile, 1) tMyOutput = f_objFile.ReadAll f_objFile.Close Set f_objFile = Nothing 'DELETE FILE AND FINISH FUNCTION If DeleteOutput = 1 Then Set f_objFile = f_objFso.GetFile(OutToFile) f_objFile.Delete Set f_objFile = Nothing End If vFn_Sys_Run_CommandOutput = tMyOutput If Err.Number <> 0 Then vFn_Sys_Run_CommandOutput = "<0>" Err.Clear On Error Goto 0 Set f_objFile = Nothing Set f_objShell = Nothing End Function 

Или еще нужно назначить вывод в буфер обмена (в первом скрипте), а затем во втором скрипте проанализировать значение буфера обмена.

Если вы получите какой-либо другой метод, пожалуйста, предложите мне тоже.

@Mark Cidade

Спасибо, Марк! Это решило несколько дней исследований о том, как я должен это назвать из PHP WshShell. Поэтому, благодаря вашему коду, я понял …

 function __exec($tmppath, $cmd) { $WshShell = new COM("WScript.Shell"); $tmpf = rand(1000, 9999).".tmp"; // Temp file $tmpfp = $tmppath.'/'.$tmpf; // Full path to tmp file $oExec = $WshShell->Run("cmd /c $cmd -c ... > ".$tmpfp, 0, true); // return $oExec == 0 ? true : false; // Return True False after exec return $tmpf; } 

Это то, что сработало для меня в моем случае. Не стесняйтесь использовать и изменять в соответствии с вашими потребностями. Вы всегда можете добавить функциональность в функцию, чтобы автоматически читать tmp-файл, назначать его переменной и / или возвращать, а затем удалять файл tmp. Еще раз спасибо @Mark!

 Dim path As String = GetFolderPath(SpecialFolder.ApplicationData) Dim filepath As String = path + "\" + "your.bat" ' Create the file if it does not exist. If File.Exists(filepath) = False Then File.Create(filepath) Else End If Dim attributes As FileAttributes attributes = File.GetAttributes(filepath) If (attributes And FileAttributes.ReadOnly) = FileAttributes.ReadOnly Then ' Remove from Readonly the file. attributes = RemoveAttribute(attributes, FileAttributes.ReadOnly) File.SetAttributes(filepath, attributes) Console.WriteLine("The {0} file is no longer RO.", filepath) Else End If If (attributes And FileAttributes.Hidden) = FileAttributes.Hidden Then ' Show the file. attributes = RemoveAttribute(attributes, FileAttributes.Hidden) File.SetAttributes(filepath, attributes) Console.WriteLine("The {0} file is no longer Hidden.", filepath) Else End If Dim sr As New StreamReader(filepath) Dim input As String = sr.ReadToEnd() sr.Close() Dim output As String = "@echo off" Dim output1 As String = vbNewLine + "your 1st cmd code" Dim output2 As String = vbNewLine + "your 2nd cmd code " Dim output3 As String = vbNewLine + "exit" Dim sw As New StreamWriter(filepath) sw.Write(output) sw.Write(output1) sw.Write(output2) sw.Write(output3) sw.Close() If (attributes And FileAttributes.Hidden) = FileAttributes.Hidden Then Else ' Hide the file. File.SetAttributes(filepath, File.GetAttributes(filepath) Or FileAttributes.Hidden) Console.WriteLine("The {0} file is now hidden.", filepath) End If Dim procInfo As New ProcessStartInfo(path + "\" + "your.bat") procInfo.WindowStyle = ProcessWindowStyle.Minimized procInfo.WindowStyle = ProcessWindowStyle.Hidden procInfo.CreateNoWindow = True procInfo.FileName = path + "\" + "your.bat" procInfo.Verb = "runas" Process.Start(procInfo) 

он сохраняет ваш .bat-файл в «Appdata текущего пользователя», если он не существует и удаляет атрибуты, и после этого устанавливает «скрытые» атрибуты в файл после написания вашего CMD-кода и запускает его тихо, а весь вывод сохраняет его файл, так что если вы хотите сохранить весь вывод cmd в файл, просто добавьте его, как это

 code > C:\Users\Lenovo\Desktop\output.txt 

просто замените слово «код» на ваш код .bat-файла или команду, а после этого в каталоге выходного файла я нашел один код недавно после поиска, если вы хотите запустить файл .bat в vb или c # или просто просто добавить это таким же образом в котором я написал

  • Что является более быстрой альтернативой http.server (или SimpleHTTPServer) Python?
  • изменение рабочего каталога команды из java
  • Постройте несколько проектов CDT C ++ из командной строки
  • Как преобразовать аргумент командной строки в int?
  • Как разобрать аргументы командной строки в Java?
  • Как запустить SSH-команды на удаленной системе с помощью Java?
  • Java: проверьте, не соответствуют ли аргументы командной строки
  • Как получить команду сборки строки cmd для решения VS?
  • Оператор блокировки vs Метод Monitor.Enter
  • Можно ли получить gcc для чтения из трубы?
  • Выполнить скрипт PowerShell из C # с аргументами командной строки
  • Interesting Posts

    Угловая директива, как добавить атрибут к элементу?

    Существуют ли расширенные параметры поиска истории Google Chrome?

    Когда функция имеет параметр массива определенного размера, почему она заменяется указателем?

    iPad Safari: как отключить быстрый мигающий эффект при ударе ссылки

    Можно ли настроить статическую IP-альтернативу для всех адаптеров с помощью реестра?

    Как заставить Chrome разрешить смешанный контент?

    Передача объектов из объектов между действиями

    Экран загрузки Angularjs по запросу ajax

    читать полный файл без использования цикла в java

    Код для простого таймера обратного отсчета времени?

    Как отсортировать первые каталоги, затем файлы и т. Д. … при использовании «ls» в Unix

    Как зашифровать данные на внешнем жестком диске?

    Ошибка при установке программы на Windows 7 64-bit

    Как распечатать имя метода и номер строки и условно отключить NSLog?

    Проблема маршрутизации OpenVPN

    Давайте будем гением компьютера.