2014-04-06 3 views
1

Я работаю над составлением списка PDF-файлов. В каталоге есть 2480 PDF. Я хочу поставить первую половину в var l1 и вторую в var l2.пакетный набор var in for loop

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 SET или SET /? из командной строки. Важный бит составляет около 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