2

Этот вопрос немного отличается от заполнения массива в DOS Batch Script.

Я пытаюсь скомпилировать приложение JavaScript с помощью Google Closure Compiler. Список файлов JavaScript вырос до 30+ файлов, и я ищу способ управления им. Я решил перенести файлы в массив, используя что-то вроде следующего:

set projectDrive=E:
set js_folder=\project\trunk\htdocs\script
set deploy_folder=\project\trunk\htdocs\bin
set closure_compiler=java -jar Z:\utils\compiler.jar
set  arrayline[0]=\script\com\appstudio\utils\Shim.js
set  arrayline[1]=\script\com\jquery\chosen.jquery.min.js
set  arrayline[2]=\script\com\jquery\jquery-cookie.js
set  arrayline[3]=\script\com\jquery\jquery.qtip.js
set  arrayline[4]=\script\com\jquery\jquery.zclip.min.js
set  arrayline[5]=\script\com\swfobject\swfobject.js
::etc
set  arrayline[31]=\script\com\lastfolder\lastFile.js

В соответствии с постом, упомянутым выше, я знаю, что могу перебрать массив следующим образом:

for /l %%n in (0,1,12) do (
    echo !arrayline[%%n]!
)

Тем не менее, это не дает мне выходной сигнал, который мне нужен, так как каждое эхо находится на новой строке. Мне нужна объединенная строка для Closure Compiler, которая приведет к чему-то вроде этого:

%closureCompiler% --js "%deployFolder%\arrayline[0].js" --js "%deployFolder%\arrayline[1].js" --js_output_file "%deployFolder%\script.js"

Где я могу выполнить Closure Compiler для составного списка элементов массива в формате --js "%deployFolder%\arrayline[x].js" Возможно ли это?

РЕДАКТИРОВАТЬ: я не упомянул первоначально, что я использую массив, потому что это быстрое и грязное доказательство концепции для среды непрерывной интеграции. Я собираюсь выкладывать эти файлы по-разному в разных контекстах, но вывод Closure Compiler является первым шагом в этом процессе. Я пока застрял с Windows, и моя среда IDE не выполняет то, что мне нужно, поэтому я работаю с пакетными файлами, просто с выбором, который я сделал для этой стадии проекта.

3 ответа3

1

Вот пост, который может ответить на ваш вопрос.

1

Чтобы прояснить цель, это создать массив длины n, содержащий список файлов, которые должны быть скомпилированы с помощью компилятора Google Closure. Вот быстрое решение с небольшой абстракцией:

@echo off
set projectDrive=E:
set js_folder=\myproject\trunk\htdocs\script
set deploy_folder=\myproject\trunk\deploy\script
::EnableDelayedExpansion is necessary to work with the array elements
::see link from Bradley Forney
setlocal EnableDelayedExpansion
REM start the command string with a reference to closure compiler
set command=java -jar E:\utils\compiler.jar

REM create whatever array elements you wish here
set  __compile_array[0]=%js_folder%\com\mycompany\utils\Shim.js
set  __compile_array[1]=%js_folder%\com\jquery\chosen.jquery.min.js
set  __compile_array[2]=%js_folder%\com\jquery\jquery-cookie.js

::Get the array length
FOR /F "tokens=2* delims=[=]" %%a IN ('SET __compile_array') DO set /a length=length+1
::Adjust length to match zero based array index
set /a length=length-1

REM loop through array elements to create the command    
for /l %%n in (0,1,%length%) do (set command=!command! --js !__compile_array[%%n]!)

write the command to the prompt with the addition of the output file
%command% --js_output_file "%deploy_folder%\main.js"
1

Вместо создания массива, когда вам нужна строка, создайте строку:

set deploy_folder=\project\trunk\htdocs\bin
set closure_compiler=java -jar Z:\utils\compiler.jar

set  jsParams=--js %deploy_folder%\script\com\appstudio\utils\Shim.js
set  jsParams=%jsParams% --js %deploy_folder%\script\com\jquery\chosen.jquery.min.js
set  jsParams=%jsParams% --js %deploy_folder%\script\com\jquery\jquery-cookie.js
set  jsParams=%jsParams% --js %deploy_folder%\script\com\jquery\jquery.qtip.js
set  jsParams=%jsParams% --js %deploy_folder%\script\com\jquery\jquery.zclip.min.js
set  jsParams=%jsParams% --js %deploy_folder%\script\com\swfobject\swfobject.js

%closure_compiler% %jsParams%

У вас могут быть причины желать придерживаться массива; однако простое добавление строки позволит достичь цели построения командной строки для выполнения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .