批量设置var in for循环

时间:2014-04-06 22:02:32

标签: batch-file set pdftk

我正在制作一份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来合并文件。

1 个答案:

答案 0 :(得分:5)

经典问题 - 在解析行时展开%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