1

我在 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,这意味着我必须知道预期有多少?

4

1 回答 1

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

于 2013-10-28T14:58:11.540 回答