Поиск…


Вступление

JScript на самом деле является надмножеством Javascript (это версия 1.8.1, поэтому некоторые новые функции недоступны), и они могут быть встроены в batch скрипт для расширения функций batch скрипта. Обычно методы встраивания используют директивы JScript (не являющиеся частью официального стандарта Javascript), чтобы отделить пакетный и JScript-код. JScript позволяет работать с объектами Com / ActiveX, а также с объектами WMI в дополнение к стандартным Javascript.

Встроенный JScript в пакетном файле

Этот следующий пример создается пользователем Майкл Диллон из этого ответа .


Рассмотрим следующий сценарий:

@set @junk=1 /*
@echo off
cscript //nologo //E:jscript %0 %*
goto :eof
*/

//JScript aka Javascript here

Этот фрагмент скрипта выполняет:

  • Выполните команду cscript которая вызывает себя со всеми предоставленными аргументами.

  • Поскольку @set @junk=1 после @set @junk=1 прокомментирован ( /* и */ - действительный комментарий JScript),

  • JScript игнорирует их.

  • Примечание. Нам нужна часть @set @junk=1 потому что командный файл не распознает /* как команду, но инструкция set будет обходным путем. JScript распознает /* как комментарий, поэтому другой batch файл не будет запущен движком JScript.


Вы можете добавить свой JScript после */ и начать расширять скрипты командного файла!

Запустить JScript с временными файлами

Как уже упоминалось здесь , метод старой школы , чтобы запустить другой сценарий является использование временных файлов. Просто echo его в файл, а затем запустите его (и удалите его опционально).


Вот основная концепция:

@echo off
echo //A JS Comment > TempJS.js
echo //Add your code>>TempJS.js

cscript //nologo //e:cscript.exe TempJS.js

del /f /s /q TempJS.js

Но для создания относительно большого JScript потребуется много echo инструкций. Вот лучший способ Аачини.

@echo off
setlocal

rem Get the number of the "<resource>" line
for /F "delims=:" %%a in ('findstr /N "<resource>" "%~F0"') do set "start=%%a"

rem Skip such number of lines and show the rest of this file
(for /F "usebackq skip=%start% delims=" %%a in ("%~F0") do echo %%a) > TempJS.js

cscript //nologo //e:cscript.txt TempJS.js
del /f /s /q TempJS.js

goto :EOF

<resource>
JScript
JScript
JScript


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow