2013-10-28 32 views
1

我在DOS批处理定义这样的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,这意味着我必须知道有多少人能期待?

回答

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 
) 

逗号的区别在于FORFOR /F平原FOR loop.One件事标准分隔符是,FOR迭代槽在list.But每个项目!空间也是一个分隔符,所以你需要引用列表中的每个项目(并且你可以用%%~l来取消)

+1

问题是它必须忽略空格,我不能发送带引号的库到CL编译器 – ali

+0

是的,我注意到了这一点并编辑了答案。 – npocmaka

+0

太棒了!这已经完成了工作并为我节省了很多时间。学习如何去除它也是如此。谢谢 – ali