我正在制作一份pdf文件列表。目录中有2480个pdf。 我想把前半部分放在var l1中,第二部分放在var l2中。
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来合并文件。
答案 0 :(得分:5)
经典问题 - 在解析行时展开%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