ObjExec VBScript nunca obtendo um novo código de status

0

Estou começando com um simples VBscript para automatizar algumas das tarefas diárias que preciso fazer no meu computador. Não vai ser complicado - basta executar alguns programas e, quando todos terminarem, reportar qualquer código de erro. Mas eu sou muito novo no VBScript, então não tenho certeza se estou fazendo algo errado. Atualmente, meu código se parece com algo assim:

Dim oShell, oExec
Set oShell = CreateObject(WScript.Shell)

Set oExec = oShell.Exec("cmd.exe /C cd path/to/file & runScript")

While oExec.Status = 0
     WScript.Sleep(250)
Loop

WScript.Echo "Done"

A coisa é, ela fica pendurada para sempre. Nunca sai do loop while. Parece funcionar bem se eu uso oShell.Run, mas eu preciso garantir que cada script que estou executando (eventualmente haverá cinco, mas eu estou começando a fazê-lo funcionar com 1) está completo antes de reportar. Mas eu não quero que eles corram um após o outro. Corrê-los paralelamente é perfeitamente correto e será muito mais rápido.

Estranhamente, parece que se eu usar o loop while para imprimir a saída do script, tudo funciona bem:

...
Do
     str = oExec.StdOut.ReadLine()
     WScript.Echo str
Loop While Not oExec.StdOut.atEndOfStream
...

Não sei qual é o problema com o comando Exec ou com o que estou fazendo errado.

Se alguém tiver uma sugestão, adoraria ouvi-la.

    
por Thomas Riley 16.03.2018 / 17:26

1 resposta

0

Para qualquer um que encontre essa resposta e esteja tão estupefato quanto eu, havia duas coisas que eu precisava fazer:

Primeiro, alguns dos StdIn dos oExecs para meus scripts estavam esperando por entrada. Use oExec.StdIn.close() para evitar isso. Finalmente, alguns dos meus roteiros estavam agindo de forma bizarra quando o texto não tinha como fazê-lo. Direcione a saída dos scripts com > nil . Isso salvou minha sanidade.

    
por 17.03.2018 / 01:28

Tags