【问题标题】:For loop statement in batch program repeats 5 times批处理程序中的for循环语句重复5次
【发布时间】:2013-07-18 10:08:55
【问题描述】:

但我对之前发布的程序仍有疑问。我认为我的 for 循环语句存在问题,因为在我打开文件“passwords.csv”后,我注意到循环重复了 5 次。

第一条记录 R_000100.pdf 最初分配了密码 8337,但在其他行中重复并重新分配了其他随机密码。当我尝试打开 PDF 文件时,似乎分配的最后一个随机密码(即 13429)实际上是它的密码,而不是 8337。

我应该如何纠正程序,在所有 PDF 文件合并并分配密码后,程序已经停止循环并退出?因此输出文件“passwords.csv”中只有一个条目,不会重复 5 次。

下面是我在 Peter Wright 的帮助下完成的完整批处理程序。

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

for /f "tokens=1,2 delims=ABCDEF_." %%i in ('dir *.txt *.pdf /b') do (

TXTtoPDF A_%%i.txt A_%%i.pdf -pps4 -pfs10.9
TXTtoPDF B_%%i.txt B_%%i.pdf -pps4 -pfs8.9
TXTtoPDF C_%%i.txt C_%%i.pdf -pps4 -plm50 -prm50 -pfs7.9
TXTtoPDF D_%%i.txt D_%%i.pdf -pps4 -plm60 -prm60 -pfs8.9
TXTtoPDF E_%%i.txt E_%%i.pdf -pps5 -pot -pfs10
TXTtoPDF F_%%i.txt F_%%i.pdf -pps5 -pot -pfs12

set pass=!random!
pdftk *%%i.pdf cat output PDF\R_%%i.pdf user_pw !pass!
echo %%i R_%%i.pdf !pass! >> passwords.csv

)

echo                ***************************************************
echo                *                                                 *
echo                *       PDF REPORTS SUCCESSFULLY GENERATED.       *
echo                *       PLEASE TYPE EXIT AT COMMAND PROMPT.       *
echo                *                                                 *
echo                ***************************************************
pause
exit

【问题讨论】:

    标签: for-loop batch-file pdf-generation


    【解决方案1】:

    很简单,你要做的就是给批处理文件提供逻辑来实现它在哪一行。

    替换:

    for /f "tokens=1,2 delims=ABCDEF_." %%i in ('dir *.txt *.pdf /b') do (
    

    与:

    set /a count=0
    for /f "tokens=1,2 delims=ABCDEF_." %%i in ('dir *.txt *.pdf /b') do (
    set /a count+=1
    if !count! equ 1 (
    

    注意:为 if 循环关闭 for 循环时添加一个额外的括号

    这样,它将计算for循环解析的每一行。如果要为第二行或第五行设置密码,请将if !count! equ 1 ( 分别替换为if !count! equ 2 (if !count! equ 5 (

    在使用 for 循环时,在所有批处理文件中执行此操作很有用。使用实际编程语言时,默认情况下会这样做。

    希望这会有所帮助。

    你的莫娜

    【讨论】:

    • 我尝试使用您的代码,但结果是只创建了 1 个合并的 PDF 文件。例如,如果我将其设置为 equ 1,则只会创建 R_000001.pdf。如果设置为 equ 5,则仅创建 R_000005.pdf,依此类推。是的,它只在 password.csv 中创建 1 个条目,但它违背了同时为每个集合制作组合 PDF 的目的(A_000001.pdf、..F_000001.pdf 应该有一个组合 PDF R_000001.pdf 等等)。无论如何,Peter Wright 先生在我的另一篇文章中所做的修改已经解决了这个问题。但是谢谢你的建议。您在每行解析中的输入很有帮助。
    • 您可以使用嵌套的 for 循环,一个用于创建任意数量的 .pdf 文件,一个用于解析行输入。做之前使用for /l %%a in (1,1, [desired amount of pdf files to create]) do ( 但是,请确保您的变量(%%a 和 %%i)没有混淆。 注意: 我不习惯TXTtoPDF,所以我真的看不出发生了什么,但除此之外,您应该能够使用for /l 来解决问题。
    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 2016-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多