1 (изменено: -red-, 2009-03-05 14:22:14)

Тема: CMD/BAT + JavaScript: два в одном

rem ( /*
@echo off
cscript /nologo /e:javascript hybrid.bat
goto end
*/ )

   // Jim Lawless
   // jimbo@radiks.net
   // http://www.radiks.net/~jimbo
   //
   // main function is below

function rem() {
   WScript.StdOut.WriteLine("Hello, world!");
}

/*
:end   */

В приведенном выше коде используется непротиворечивость синтаксиса интерпретатора CMD и JavaScript:
rem - в случае CMD выступает как комментарий, а в случае JavaScript как выполняемая главная функция, т.о. сначала выполняется BAT скрипт, а затем JS.

PS: Я бы модифицировал строку вызова JS скрипта т.о.:

cscript /nologo /e:javascript %~nx0

© Copyright WSH in BAT Clothing

См. также: CMD/BAT + KiXtart: два в одном

2

Re: CMD/BAT + JavaScript: два в одном

Jim Lawless видимо предложил это достаточно давно, во времена Win95.
Если не заморачиваться с поддержкой старых систем и старых версий WSH, можно делать так:

@set @x=0 /*
@echo off
echo This is CMD-part of script
cscript /nologo /e:javascript %0
goto:eof */

WScript.Echo("This is JS-part of script")

Здесь не выводится эхо от первой команды, нет "лишнего" эпилога для завершения пакетного файла и не нужно создавать "лишнюю" функцию в JS.

3

Re: CMD/BAT + JavaScript: два в одном

Думаю вместо

cscript /nologo /e:javascript %0

будет правильней

cscript /nologo /e:javascript %~dpf0

4 (изменено: Rumata, 2010-01-20 14:54:13)

Re: CMD/BAT + JavaScript: два в одном

По мотивам этой темы летом написал скрипт, который частично автоматизирует работу. Теперь, если вы jscript/javascript-разработчик, можете не беспокоиться о такой мелочи, как объединение JS и CMD/BAT, просто сконцентрируйте свое внимание на разработке своего js-скрипта - всю последующую работу выполнит этот скрипт

js2bat some-jscript.js

Он возьмет ваш js-скрипт и автоматически конвертирует его в bat-скрипт, добавив необходимый пролог. Для повышения удобства добавлены следующие аргументы

js2bat /h пишет:

Usage:
JS2BAT [/H]
JS2BAT [file] [/W] [/A:"string"]

где
file - имя преобразуемого файла
/H - справка о пользовании программой
/W - использовать WSCRIPT.EXE вместо CSCRIPT.EXE (по умолчанию)
/A:"string" - дополнительные аргументы для интерпретатора (по умолчанию, если ничего не указано -  /NOLOGO)

Исходный код на странице JS2BAT Converter.

Скрипт изначально написан на JScript и конвертирован в bat-аналог с помощью команды

cscript js2bat.js js2bat.js
( 2 * b ) || ! ( 2 * b )

5 (изменено: badik, 2011-10-11 06:42:03)

Re: CMD/BAT + JavaScript: два в одном

Вариант с условной компиляцией:

@if (!@_jscript) == (!@_jscript) (echo off)
cscript //nologo //e:javascript "%~dpnx0" %*
goto :eof
@end
 
WScript.Echo("Hello from JScript");

6

Re: CMD/BAT + JavaScript: два в одном

Еще один вариант. Аналогично способу, предложенному коллегой Smitis: удобно работать с js-кодом в редакторах с подсверкой синтаксиса.


@if (true == false) @end /*
@echo off
cscript //nologo //e:javascript "%~dpnx0" %*
goto :EOF */

WScript.Echo('Hello from JScript');
( 2 * b ) || ! ( 2 * b )