none
批处理中如何将多个值赋给一个变量 RRS feed

  • 问题

  • 比如我要用批处理实现这样一个需求,将当前文件夹下的obj文件都赋给一个变量,比如D:\work下有a.obj、b.obj和c.obj等多个文件,现在把遍历D:\work这个文件夹,所有的obj文件的路径都赋给OBJS,最后输出OBJS的值是OBJS=D:\work\a.obj D:\work\b.obj D:\work\c.obj

    代码大致如下:

    set OBJS=
    for /r ./ %%a in (*.obj) do (
    set "OBJS=%OBJS% %%a"
    )
    echo %OBJS%
    但是这段代码并不能实现这个效果。


    前无古人,后无来者

    2020年8月31日 14:24

答案

  • 您好,

    使用%OBJ%来引用变量时只会执行一次扩展,在第一次循环中扩展为初始的空值,之后每次循环中%OBJ%都是空值而不会改变。这里可以启用EnableDelayedExpansion来延迟扩展,使用!OBJ!来引用变量

    @echo off
    SETLOCAL EnableDelayedExpansion
    set OBJS=
    for /r ./ %%a in (*.obj) do (
    set "OBJS=!OBJS! %%a"
    )
    echo %OBJS%


    如果回复对您有所帮助的话,您请将回复标记为答案, 可以帮助其他有相同问题的社区成员, 并快速找到有用的答复。

    感谢您的理解和支持。

    此致

    Ian Xue


    Please remember to mark the replies as answers if they help.
    If you have feedback for TechNet Subscriber Support, contact tnmff@microsoft.com.


    • 已编辑 Ian Xue 2020年9月1日 6:01
    • 已标记为答案 clever101 2020年9月1日 8:12
    2020年9月1日 5:54