Назад | Перейти на главную страницу

Как запустить командный файл без окна в ОДНОМ файле

Я знаю, как запускать командные файлы без окна, благодаря этому вопросу здесь: Запустить .bat-файл в запланированной задаче без окна.

Первый ответ - тот, который я использую. В нем говорится, что для запуска командного файла без окна создайте следующий файл vbs и вместо этого запустите файл vbs.

Dim WinScriptHost
Set WinScriptHost = CreateObject("WScript.Shell")
WinScriptHost.Run Chr(34) & "C:\Scheduled Jobs\mybat.bat" & Chr(34), 0
Set WinScriptHost = Nothing

Мой вопрос в том, можно ли это сделать в одном файле. (каким-то образом объединяя сценарий vbs и сценарий пакетного файла) Для ответа выше потребуется два файла, поскольку файл vbs относится к пакетному файлу. Если это возможно, как это сделать?

В сценарии создайте временный файл и запишите в него командный файл. Затем выполните сценарий из временного файла. По завершении удалите временный файл.

В идеале, запишите временный файл в место, где другие пользователи не могут получить к нему доступ, потому что там есть потенциальное состояние гонки, которое можно использовать для повышения разрешений.

Существует множество методов создания гибридных скриптов, описанных на http://www.dostips.com/forum/viewtopic.php?f=3&t=5543.

Я перечислил несколько способов создания гибридной VBS / партии на https://stackoverflow.com/q/9074476/1012053.

Однако создать гибридный JScript / пакетный код немного проще, поэтому я представлю это решение здесь.

Большинство гибридов сначала выполняют пакетную часть, которая затем выполняет VBS или JScript через CScript. Но в вашем случае вы хотите сначала запустить JScript, который затем запускает пакетный скрипт. Обратите внимание, что в сценарии все еще должен быть .bat расширение для запуска пакетного сценария. JScript запускается сначала через WScript с //e:jscript вариант.

Вот простой гибридный сценарий, который должен помочь:

@if (@X)==(@Y) @end /* harmless hybrid line that begins a JScript comment
::************ Batch portion ***********
@echo off

:: Your batch code goes here

exit /b
************ JScript portion ***********/
var objShell = new ActiveXObject("WScript.shell");
objShell.run(WScript.ScriptFullName,0);

Полная командная строка для вашей запланированной задачи должна выглядеть примерно так:

C:\Windows\System32\wscript.exe //e:jscript "C:\Scheduled Jobs\mybat.bat"

Одна особенно приятная особенность этого решения заключается в том, что вы можете запускать пакетный сценарий напрямую, и он будет нормально работать в видимом окне cmd.exe, или вы можете активировать его через WSCRIPT для невидимого выполнения.