【问题标题】:batch set var in for loop在 for 循环中批量设置 var
【发布时间】:2014-04-06 22:02:32
【问题描述】:

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

【问题讨论】:

    标签: batch-file set pdftk


    【解决方案1】:

    经典问题 - %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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-06
      • 2014-05-05
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多