【问题标题】:Batch loop through comma separated text通过逗号分隔的文本批量循环
【发布时间】:2013-10-28 14:52:40
【问题描述】:

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

【问题讨论】:

    标签: loops batch-file delimiter comma


    【解决方案1】:
    @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取消引用)

    【讨论】:

    • 问题是它必须忽略空格,我无法将引用的库发送到 CL 编译器
    • 太棒了!这完成了工作并为我节省了很多时间。也学会了如何取消报价。谢谢
    猜你喜欢
    • 2015-02-26
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-23
    • 1970-01-01
    相关资源
    最近更新 更多