windows - Få returneringsværdien fra en cmd/c-kommando i VBScript

Indlæg af Hanne Mølgaard Plasc

Problem



I VBScript giver den indbyggede Shell.Run -metode ikke mulighed for omdirigering af output, så følgende løsning skal bruges:


Kører kommandolinje lydløst med VbScript og få output?


Dim retVal
retVal = WshShell.Run( "cmd /c ""commandGoesHere"" > c:	empoutput.txt", 0, True )


Men returnValue vil have returneringsværdien af ​​cmd, ikke af commandGoesHere.


Jeg troede jeg kunne tjekke shell.Environment("ERRORLEVEL"), men formodentlig ville det også være cmd s returværdi, og ikke commandGoesHere.


... så hvordan kan jeg få commandGoesHere s returværdi og samtidigt omdirigere dens output til en anden fil?

Bedste reference


returnValue = WScript.CreateObject("WScript.Shell").Run( \_ 
    "cmd /v /c (>""output.txt"" ""commandGoesHere"" & exit !errorlevel!)" \_ 
    , 0 \_ 
    , True \_ 
)


Start cmd -eksemplet med forsinket udvidelse aktiveret (/v) og afslut [[]] 13-forekomsten med errorlevel indstillet af den foregående kommando.


Forsinket udvidelse er nødvendig, fordi cmd -parseren erstatter alle \%var\% -læsningsoperationer med værdien inde i variablerne under linjens/blokparsefasen. Uden forsinket ekspansion (\%errorlevel\%) vil værdien, der returneres af kommandoen exit, blive retrived, før du begynder at udføre kommandoen. Med forsinket ekspansion (!errorlevel!) hentes værdien, når kommandoen exit udføres, efter at commandGoesHere er afsluttet.