Kjører kommandolinje stille med VBScript og får utgang?

stemmer
29

Jeg ønsker å være i stand til å kjøre et program via kommandolinjen, og jeg ønsker å starte den med VBScript. Jeg ønsker også å få produksjonen av kommandolinjen og tilordne den til en variabel, og jeg ønsker alt dette gjøres stille uten cmd vinduer dukker opp. Jeg har klart to ting separat, men ikke sammen. Her er hva jeg kom så langt. Kjør kommandoen fra cmd og få utgang:

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

Ovennevnte skriptet fungerer og gjør hva jeg vil, bortsett fra at cmd kommer opp for et kort øyeblikk.

Her er et skript som vil kjøre lydløst, men vil ikke ta tak i produksjonen

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)

Er det en måte å få disse to til å jobbe sammen?

La meg gi deg en bakgrunn for hvorfor jeg vil gjøre med dette. Jeg er i utgangspunktet valg en enhet hver 5-10 minutter, og jeg kommer til å få manuset til e-post eller kaste en meldingsboks når en bestemt situasjon oppstår, men jeg ønsker ikke å se cmd linjen dukker opp hele dagen på min datamaskin. Noen forslag? Takk

Publisert på 16/04/2011 klokken 20:41
kilden bruker
På andre språk...                            


6 svar

stemmer
32

Du kan omdirigere utdata til en fil og deretter lese filen:

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
Svarte 16/04/2011 kl. 20:58
kilden bruker

stemmer
0

Ellers ser for tildeling utgang til utklippstavlen (i ditt første manuset) og deretter i andre script parse Clipboard verdi.

Hvis du får noen annen metode kan du foreslå meg også.

Svarte 13/12/2011 kl. 03:43
kilden bruker

stemmer
10

Jeg har tatt denne og diverse andre kommentarer og skapte litt mer avansert funksjon for å kjøre et program og få utgang.

Eksempel til Call Funksjon: Vil utgang DIR listen over C: \ for kataloger bare. Utgangen vil bli returnert til de variable CommandResults så vel som forblir i C: \ OUTPUT.TXT.

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

Funksjon

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
Svarte 21/09/2012 kl. 18:21
kilden bruker

stemmer
0

@Mark Cidade

Takk Mark! Dette løste noen dager med forskning på lurer på hvordan skal jeg kalle dette fra PHP WshShell. Så takk til koden, jeg skjønte ...

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;
}

Dette er hva som fungerte for meg i mitt tilfelle. Føl deg fri til å bruke og modifisere som per dine behov. Du kan alltid legge til funksjonalitet i funksjonen for automatisk å lese tmp-filen, tilordne den til en variabel og / eller returnere den og deretter slette tmp-filen. Takk igjen @Mark!

Svarte 23/11/2014 kl. 22:37
kilden bruker

stemmer
0
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)

det sparer bat fil til "Appdata av gjeldende bruker", hvis det ikke eksisterer og fjerne attributtene og etter det sette den "skjulte" egenskaper til filen etter å skrive inn cmd kode og kjøre det stille og fange opp alle utgang lagrer det til fil så hvis u vil lagre all produksjon på cmd til fil bare legge din som dette

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

bare erstatte ordet "code" med bat fil kode eller kommando, og etter at katalogen av utdatafilen Jeg fant en kode nylig etter å ha søkt mye hvis u vil kjøre .bat fil i vb eller C # eller rett og slett bare legge dette på samme måte der jeg har skrevet

Svarte 21/06/2015 kl. 09:51
kilden bruker

stemmer
0

Jeg er ganske ny på alt dette, men jeg fant ut at hvis skriptet startes via cscript.exe (konsoll scripting host) er det ingen vindu dukker opp på exec (): så når du kjører:

cscript myscript.vbs //nologo

noen .Exec () kaller i myscript.vbs ikke åpne et ekstra vindu, noe som betyr at du kan bruke den første varianten av den opprinnelige løsningen (med exec).

(Merk at de to skråstreker i koden ovenfor er tilsiktet, se cscript /?)

Svarte 18/12/2018 kl. 14:56
kilden bruker

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more