The OP is using that method in the temporary VBS file. I don't understand the logic behind this VBS file as opposed to performing the same task directly from Lisp.
True! It would also make it a lot simpler - no need for a loop, since it simply then returns when complete.
Though the VBS environment does have the WScript.Sleep idea so it can "wait" for something to complete. Instead of the way Lisp does by constantly checking though a loop, i.e. hogging one CPU core for the entire time just simply to test if the script has completed. So I'd suggest doing it the other way round: place the Run call in Lisp and the Exec in VBS. Of course if such even makes sense.
It might help if the OP describes what is actually expected. E.g. is Exec used because access is needed to something like StdOut / StdIn? Why then command-line arguments for the input and output files?