批处理循环通过逗号分隔的文本

时间:2013-10-28 14:52:40

标签: loops batch-file delimiter comma

我在DOS Batch中定义了这样的lib文件列表:

set libs=MSVCRT.LIB Kernel32.lib User32.lib,^
         MSVCRT.LIB Kernel32.lib User32.lib d3d9.lib,^
         MSVCRT.LIB Kernel32.lib User32.lib d3d9.lib OpenGL32.lib

我必须根据要创建的可执行文件将其中的每一个传递给编译器。现在,我只想知道如何循环并获取这些库列表中的每一个。这就是我现在所拥有的:

setlocal enabledelayedexpansion
for /F "tokens=1* delims=," %%f in ("%LIBRARIIEXTERNE%") do (
    if not "%%f" == "" (
        echo "F:%%f"
    )
    if not "%%g" == "" (
        echo "G:%%g"
    )
)
endlocal

所以,我只得到第一个元素,最后两个元素加入。是否有可能得到列表的每个部分(用逗号分隔),无论数字,还是我必须使用%%f, %%g, %%h,这意味着我必须知道有多少人可以期待?

1 个答案:

答案 0 :(得分:2)

@echo off
set libs="MSVCRT.LIB Kernel32.lib User32.lib",^
         "MSVCRT.LIB Kernel32.lib User32.lib d3d9.lib",^
         "MSVCRT.LIB Kernel32.lib User32.lib d3d9.lib OpenGL32.lib"

for %%l in (%libs%) do (
  echo %%~l
)

逗号是普通FOR循环中的标准分隔符。FORFOR /F不同的一点是FOR遍历列表中的每个项目。但是!空格也是一个分隔符,因此您需要引用列表中的每个项目。(您可以使用%%~l取消引用它)