VBScript Run commandline en wacht op resultaat

Pagina: 1
Acties:

  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Mijn probleem is als volgt. Ik heb een exe die ik moet uitvoeren in een dos commandbox met een variabele. Het resultaat van deze commandline moet worden teruggekregen om te kijken of het commando succesvol is afgerond. Dit moet ik meer dan 600 keer herhalen met verschillende variabelen.

Ik heb tot nu toe de volgende sub hiervoor;
code:
1
2
3
4
5
6
7
8
9
    strTempOutputBestand = objFSO.GetSpecialFolder(TemporaryFolder) & objFSO.GetTempName
    objShell.Run "cmd /C " & strPath & "con2prt.exe /c " & trim(strPrinter) & " > " & strTempOutputBestand
    'if objFSO.OpenTextFile(strTempOutputBestand, OpenFileForReading).Read(6) = "Failed" then
        intError = intError + 1
        Call WriteLog(strPrinter, 4)
    else
        Call WriteLog(strPrinter, 0)
    end if
    objFSO.DeleteFile(strTempOutputBestand)

Deze bepaald eerst de naam voor een tempbestand. Vervolgens wordt via een wscript shell het commando uitgevoerd met een piping naar het tempbestand. Daarna lees ik met VBScript het bestand weer in om te bepalen wat het resultaat is van het commando. Daarna wordt het tempbestand weer verwijderd.

Dit klinkt wel aardig maar het werkt niet. VBScript gaat namelijk door direct nadat de commandbox is geopend. De volgende stap wordt dan te vroeg uitgevoerd aangezien het tempbestand er nog niet is. de Run aanroepen met een bWaitOnReturn werkt ook niet. Het commando wordt dan op een vage wijze helemaal niet meer uitgevoerd. En omdat het een commandbox is wordt deze nooit automatisch beëindigd en dus gaat het script niet verder.

Wat ik dus wil is code die voor mij het commando uitvoert, het resultaat opvangt (direct of in een temp bestand) en daarna pas het resultaat analiseert. Dit alles moet het liefst verborgen voor de gebruiker gebeuren (zoals de ,0 doet bij shell.Run).

I'm not a complete idiot - several parts are missing.


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Blijkbaar een moeilijk probleem. Weet niemand hoe ik dit moet oplossen?

I'm not a complete idiot - several parts are missing.


  • brokenp
  • Registratie: December 2001
  • Nu online
als je progje een vaste werktijd heeft, kan je hem gewoon even laten slapen.

Of je probeert te achterhalen wanneer de tempfile beschreven is. Maak een while loop met daarin bijv een check op de laatste regels van je temp file.

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
maak een batch bestand met de volgende inhoud :
commando
echo klaar > klaar.txt

Dan kijk je via vbscript of het bestand klaar.txt bestaat,zoja haal het bestand klaar.txt weg en ga door, zonee loop

Omslachtige methode. Maar werkt in elke programmeertaal.

  • -rAz-
  • Registratie: April 2002
  • Laatst online: 28-05-2022
Ik gebruik Gomez12 zijn manier ook altijd. Ik creeer een batch file met achteraan
echo ok>ok.txt

dan laat ik mijn VB progje loopen met een delay met Doevents ertussen en klaars is kees, zodra hij ok.txt vind gaat hij verder en ik delete ok.txt direct

werkt prachtig

  • TheVMaster
  • Registratie: Juli 2001
  • Laatst online: 23:08

TheVMaster

Moderator WOS
Dit verteld de ScriptingHost helpfile :
Windows Scripting Host Help File
Run Method
Creates a new process that executes strCommand.

object.Run (strCommand, [intWindowStyle], [bWaitOnReturn])

Arguments
object

WshShell object.

strCommand

Environment variables within the strCommand parameter are automatically expanded.

intWindowStyle

Optional. Sets the window style of the program being run.

bWaitOnReturn

Optional. If bWaitOnReturn is not specified or FALSE, immediately returns to script execution rather than waiting for the process to end.

If bWaitOnReturn is set to TRUE, the Run method returns any error code returned by the application.

If bWaitOnReturn is not specified or is FALSE, the Run method returns an error code of 0 (zero).

DiscVault - Beheer je fysieke schijvencollectie | Beschikbaar als Self-Hosted, iOS (ook TestFlight) en Android (beta).


  • Brahiewahiewa
  • Registratie: Oktober 2001
  • Laatst online: 30-09-2022

Brahiewahiewa

boelkloedig

De vraag blijft natuurlijk wel: "Waarom zit je in godsnaam te klooien met con2prt terwijl je gewoon WMI kunt gebruiken?". Zie bijv: http://support.microsoft....?scid=kb%3Ben-us%3B263226

QnJhaGlld2FoaWV3YQ==


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Brahiewahiewa schreef op 14 March 2003 @ 15:24:
De vraag blijft natuurlijk wel: "Waarom zit je in godsnaam te klooien met con2prt terwijl je gewoon WMI kunt gebruiken?". Zie bijv: http://support.microsoft....?scid=kb%3Ben-us%3B263226
Omdat ik die nog niet kende. Je bent een held. _/-\o_ Dit lost mijn probleem veel mooier en sneller op. Bedankt voor al jullie reacties. Was al een en op weg met de sleep optie maar dit levert veel meer zekerheden op.

I'm not a complete idiot - several parts are missing.


  • WvdWest
  • Registratie: Augustus 2002
  • Niet online
Ok script werkt nu. Binnen drie minuten kan ik meer dan 600 printers toevoegen. Nogmaals bedankt voor de hulp. Topic kan gesloten worden.

I'm not a complete idiot - several parts are missing.

Pagina: 1