-1

但是我仍然对我之前发布的程序有疑问。我认为我的 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
4

1 回答 1

0

很简单,您要做的就是为批处理文件提供逻辑以实现它取决于哪一行。

代替 :

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 循环时,在所有批处理文件中执行此操作很有用。使用实际编程语言时,默认情况下会执行此操作。

希望这有帮助。

你的莫娜

于 2013-07-18T10:47:28.873 回答