batch-file
Пакеты и гибриды
Поиск…
Вступление
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