Use array para criar string no DOS

2

Esta é uma pergunta um pouco diferente de Populating Array in DOS Batch Script

Estou tentando compilar um aplicativo JavaScript usando o Google Closure Compiler. A lista de arquivos JavaScript cresceu para mais de 30 arquivos e estou procurando uma maneira de gerenciá-los. O que eu decidi é empurrar os arquivos para um array usando algo como o seguinte:

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

De acordo com o post mencionado acima, eu sei que posso percorrer o array da seguinte forma:

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

No entanto, isso não me dá a saída de que preciso, pois cada eco está em uma nova linha. Eu preciso de uma string concatenada para o Closure Compiler que resultará em algo como isto:

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

Onde posso executar o Closure Compiler em uma lista concatenada de elementos de matriz no formato --js "%deployFolder%\arrayline[x].js" Isso é possível?

EDIT: Eu não mencionei originalmente que estou usando uma matriz porque esta é uma prova de conceito rápida e suja para um ambiente de integração contínua. Eu vou estar cuspindo esses arquivos de maneiras diferentes em diferentes contextos, mas a saída do Compilador de Fechamento é a primeira etapa desse processo. Eu estou preso com uma caixa do Windows por agora e meu IDE não faz o que eu quero, então eu estou trabalhando com arquivos em lote, apenas a escolha que fiz para esta fase do projeto.

    
por Shane 28.02.2014 / 13:24

3 respostas

1

Para esclarecer o objetivo, é criar uma matriz de comprimento n contendo uma lista de arquivos a serem compilados através do compilador google closure. Aqui está a solução rápida com um pouco de abstração:

@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"
    
por 28.02.2014 / 15:46
1

Aqui está uma postagem que pode responder à sua pergunta.

por 28.02.2014 / 13:36
1

Em vez de criar uma matriz quando o que você quer é uma string, crie a string:

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%

Você pode ter motivos para querer continuar com a matriz. no entanto, apenas acrescentar uma string atingiria seu objetivo de criar uma linha de comando para execução.

    
por 28.02.2014 / 15:55