Linha de comando do Windows: Como anexar uma variável em um loop?

7

Estou tentando preencher uma variável com uma lista de arquivos separada por espaços, mas não consigo entender bem a minha opinião.

Aqui está o que eu tenho até agora:

set js_files=
for %%f in (js/*.js) do set js_files=%js_files% js/%%f
echo %js_files%
C:\path\to\jsminifier.exe --inputfiles %js_files%

Eu esperava que isso continuasse anexando a variável js_files ao próximo nome de arquivo, mas substituísse toda a variável:

c:\dir>script.cmd
c:\dir>set js_files=
c:\dir>for %f in (js/*.js) do set js_files= js/%f
c:\dir>set js_files= js/one.js
c:\dir>set js_files= js/two.js
c:\dir>set js_files= js/three.js
c:\dir>echo  js/three.js
js/three.js

Eu vejo na segunda linha de saída que toda a linha for parece ser analisada antes da execução, então o valor da variável vazia (inicial) é usado para todas as iterações.

Alguém sabe como anexar adequadamente a variável?

Obrigado!

    
por Alan 25.05.2011 / 07:52

1 resposta

5

Tente alterá-lo para isso:

set js_files=
for %%f in (js/*.js) do set js_files=!js_files! js/%%f
echo %js_files%
C:\path\to\jsminifier.exe --inputfiles %js_files%

Observe a mudança de set js_files=%js_files% js/%%f para set js_files=!js_files! js/%%f - usando os pontos de exclamação no lugar dos sinais de porcentagem, você está instruindo o shell a expandir a variável de ambiente dinamicamente durante a execução.

    
por 25.05.2011 / 08:44