2014-04-06 195 views
1

我正在製作PDF文件列表。目錄中有2480個pdf文件。 我想把第一部分放在var l1中,第二部分放在var l2中。批處理設置var in for循環

for /r %%f in (*_*.pdf) do (
    set c=%%~nf 
    set c=%c:~5,4% 
    if %c% LEQ 1240 (set l1=%l1% %%~nf.pdf) 
    if %c% GEQ 1241 (set l2=%l2% %%~nf.pdf) 
) 
pdftk %l1% cat output group1.pdf 
pdftk %l2% cat output group2.pdf 

我已經嘗試了幾種組合,但無法完成它的工作。上述腳本是我需要完成的基本前提。我正在使用pdftk來合併文件。

回答

4

經典問題 - %c%等行被解析時被擴展,並且整個FOR循環被一次解析。所以循環內的值是不變的 - 循環開始之前的值。 (可能沒有價值)。

修復很簡單 - 您需要延遲擴展。您可以在SET的內置幫助中閱讀。從命令提示符輸入HELP SETSET /?。最重要的一點是大約2/3下來,開始與「最後,對於延遲的環境變量擴展支持已經 添加...」

您需要啓用與SETLOCAL ENABLEDELAYEDEXPANSION延遲擴展,可以使用它。

setlocal enableDelayedExpansion 
for /r %%f in (*_*.pdf) do (
    set c=%%~nf 
    set c=!c:~5,4! 
    if !c! LEQ 1240 (set l1=!l1! %%~nxf) 
    if !c! GEQ 1241 (set l2=!l2! %%~nxf) 
) 
pdftk %l1% cat output group1.pdf 
pdftk %l2% cat output group2.pdf