web-dev-qa-db-ja.com

Windowsコマンドライン:ループに変数を追加する方法は?

スペースで区切られたファイルのリストで変数を埋めようとしていますが、頭を悩ませているようには見えません。

これが私がこれまでに持っているものです:

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%

これにより、js_files変数に次のファイル名が追加され続けると予想していましたが、代わりに変数全体が置き換えられます。

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

出力の2行目では、for行全体が実行前に解析されているように見えるため、(初期の)空の変数値がすべての反復に使用されます。

変数に適切に追加する方法を知っている人はいますか?

ありがとう!

9
Alan

これに変更してみてください:

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%

set js_files=%js_files% js/%%fからset js_files=!js_files! js/%%fへの変更に注意してください。パーセント記号の代わりに感嘆符を使用することで、実行中に環境変数を動的に拡張するようにシェルに指示しています。

7