Windows 命令行:如何在循环中附加变量?

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

我在第二行输出中看到整for行似乎在执行之前被解析,因此所有迭代都使用(初始)空变量值。

有谁知道如何正确地附加到变量?

谢谢!

答案1

尝试将其改为这样:

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/%%fset js_files=!js_files! js/%%f通过使用感叹号代替百分号,您指示 shell 在执行期间动态扩展环境变量。

相关内容