Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there a way to run a command line command from JScript (not javascript) in Windows Scripting Host (WSH) cscript.exe?

I'm writing a JScript program which is run in cscript.exe. Is it possible to run a commnad line command from within the script. It would really make the job easy, as I can run certain commands instead of writing more code in jscript to do the same thing.


For example: In order to wait for a keypress for 10 seconds, I could straight away use the timeout command

timeout /t 10

Implementing this in jscript means more work. btw, I'm on Vista and WSH v5.7

any ideas? thanx!

like image 647
detj Avatar asked Sep 17 '09 23:09

detj


2 Answers

You can execute DOS commands using the WshShell.Run method:

var oShell = WScript.CreateObject("WScript.Shell");
oShell.Run("timeout /t 10", 1 /* SW_SHOWNORMAL */, true /* bWaitOnReturn */);


If you specifically need to pause the script execution until a key is pressed or a timeout elapsed, you could accomplish this using the WshShell.Popup method (a dialog box with a timeout option):

var oShell = WScript.CreateObject("WScript.Shell");
oShell.Popup("Click OK to continue.", 10);

However, this method displays a message box when running under cscript as well.

Another possible approach is described in this article: How Can I Pause a Script and Then Resume It When a User Presses a Key on the Keyboard? In short, you can use the WScript.StdIn property to read directly from input stream and this way wait for input. However, reading from the input stream doesn't support timeout and only returns upon the ENTER key press (not any key). Anyway, here's an example, just in case:

WScript.Echo("Press the ENTER key to continue...");

while (! WScript.StdIn.AtEndOfLine) {
   WScript.StdIn.Read(1);
}
like image 106
Helen Avatar answered Sep 28 '22 10:09

Helen


thanx for the help ppl, this was my first post and stackoverflow is awesome! Also, I figured out another way to do this thing, using the oShell.SendKeys() method.
Here's How:

var oShell = WScript.CreateObject("WScript.Shell");
oShell.SendKeys("cls{enter}timeout /t 10{enter}");

This way you can run almost every dos command without spawning a new process or window

EDIT: Although it seems to solve the problem, this code is not very reliable. See the comments below

like image 28
detj Avatar answered Sep 28 '22 10:09

detj