Use array para criar string no DOS


2

Esta é uma questão ligeiramente diferente da Preenchendo a matriz no script em lote do DOS

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 uma matriz 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 assim:

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 de --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.

Respostas:


1

1
Boa descoberta, obrigado +1. Ainda bem que não preciso de nada Turing completo! Não vai marcar isso como uma resposta em sua forma atual, já que é tecnicamente uma referência a uma lista de técnicas, mas muito útil mesmo assim.
Shane

2
Link apenas respostas não são encorajadas aqui. Resuma o que você encontra e forneça um link para atribuição
Canadian Luke

Não tinha certeza do protocolo, pois é um link dentro da mesma rede de sites. Obrigado pela informação!
Bradley Forney

1

Para esclarecer o objetivo, é para criar uma matriz de comprimento n contendo uma lista de arquivos a serem compilados através do 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"

ainda não, só tem um 127 representante neste site. Tem que esperar 2 dias :(
Shane

1

Em vez de construir um array quando o que você quer é uma string, construa 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 ficar com o array; no entanto, apenas acrescentar uma string atingiria seu objetivo de criar uma linha de comando para execução.


A matriz é para manutenção e re-propósito Eu não estava claro sobre o motivo da pergunta original. A técnica de construção de cordas é definitivamente mais simples.
Shane
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.