Есть ли способ запустить команду командной строки из JScript (не javascript) в Windows Scripting Host (WSH) cscript.exe? - PullRequest
6 голосов
/ 18 сентября 2009

Я пишу программу JScript, которая запускается в cscript.exe. Можно ли запустить команду линии comnad из скрипта? Это действительно облегчило бы работу, так как я могу выполнять определенные команды вместо того, чтобы писать больше кода в jscript, чтобы сделать то же самое.


Например: Чтобы ждать нажатия клавиши в течение 10 секунд, я мог бы сразу использовать команду тайм-аута

timeout /t 10

Реализация этого в jscript означает больше работы. Кстати, я на Vista и WSH v5.7

есть идеи? спасибо!

Ответы [ 3 ]

8 голосов
/ 18 сентября 2009

Вы можете выполнять команды DOS, используя метод WshShell.Run:

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


Если вам необходимо приостановить выполнение сценария до нажатия клавиши или истечения времени ожидания, вы можете сделать это, используя метод WshShell.Popup (диалоговое окно с параметром времени ожидания):

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

Однако этот метод отображает окно сообщения и при работе в cscript.

Другой возможный подход описан в этой статье: Как я могу приостановить сценарий и затем возобновить его, когда пользователь нажимает клавишу на клавиатуре? Короче говоря, вы можете использовать WScript.StdIn свойство для чтения непосредственно из входного потока и, таким образом, ожидания ввода. Однако чтение из входного потока не поддерживает тайм-аут и возвращается только после нажатия клавиши ENTER (но не любой клавиши). Во всяком случае, вот пример, на всякий случай:

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

while (! WScript.StdIn.AtEndOfLine) {
   WScript.StdIn.Read(1);
}
1 голос
/ 18 сентября 2009

спасибо за помощь ppl, это был мой первый пост, и stackoverflow потрясающий! Кроме того, я нашел другой способ сделать это, используя метод oShell.SendKeys().
Вот как:

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

Таким образом, вы можете запустить практически каждую команду dos без запуска нового процесса или окна.

РЕДАКТИРОВАТЬ: Хотя кажется, что решить проблему, этот код не очень надежен. Смотрите комментарии ниже

0 голосов
/ 18 сентября 2009

Да, с объектом WScript.Shell.

См. Документы и образцы

...