在DOS中使用数组创建字符串

在DOS中使用数组创建字符串

这个问题与在 DOS 批处理脚本中填充数组

我正在尝试使用 Google Closure Compiler 编译 JavaScript 应用程序。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"

--js "%deployFolder%\arrayline[x].js"我可以在哪里针对格式为“这可能吗?”的连接数组元素列表执行 Closure Compiler ?

编辑:我最初没有提到我正在使用数组,因为这是持续集成环境的概念的快速而粗糙的证明。我将在不同的上下文中以不同的方式吐出这些文件,但 Closure Compiler 输出是该过程的第一步。我现在只能使用 Windows 框,而且我的 IDE 无法按照我的要求运行,所以我正在使用批处理文件,这只是我为项目的这个阶段做出的选择。

答案1

答案2

为了明确目标,需要创建一个长度为 n 的数组,其中包含要通过 Google 闭包编译器编译的文件列表。以下是带有一点抽象的快速解决方案:

@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"

答案3

当您需要的是字符串时,不要构建数组,而是构建字符串:

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%

您可能有理由想要坚持使用数组;但是,只需附加一个字符串就可以实现构建要执行的命令行的目标。

相关内容