2013-10-28 35 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