Batch file 如何使用批处理程序为PDF文件生成随机密码
我需要一些帮助。我目前正在执行一个批处理程序,该程序执行以下操作: 在\Reports\文件夹中存储了多个文本文件。比如说, A_000100.txt、A_000200.txt、B_000100.txt、B_000200.txt、C_000100.txt、C_000200.txt、D_000100.txt、D_000200.txt、E_000100.txt、E_000200.txt、F_000100.txt、F_000200.txtBatch file 如何使用批处理程序为PDF文件生成随机密码,batch-file,passwords,pdf-generation,Batch File,Passwords,Pdf Generation,我需要一些帮助。我目前正在执行一个批处理程序,该程序执行以下操作: 在\Reports\文件夹中存储了多个文本文件。比如说, A_000100.txt、A_000200.txt、B_000100.txt、B_000200.txt、C_000100.txt、C_000200.txt、D_000100.txt、D_000200.txt、E_000100.txt、E_000200.txt、F_000100.txt、F_000200.txt 必须使用命令行将所有文本文件单独转换为PDF。为了解决这个问题
TXTtoPDF A_000100.txt A_000100.pdf-pps4-pfs10.9
- 为了解决第2和第3项,我安装了程序PDFTK(或PDF工具包)。它具有命令行功能,可以将PDF文件与不同的参数组合在一起,包括将密码添加到PDF文件中。下面一行显示了如何将多个PDF文件合并为一个文件,以及如何向PDF文件中添加随机密码
pdftk*%%i.pdf cat输出R\uu%%i.pdf所有者\u pw%random%
echo%%i R\%%i.pdf%random%%>>passwords.csv
实际上,生成随机密码并将其存储到CSV文件是我遇到的问题。它似乎不起作用。我不知道如何正确地做这件事。任何精通批处理编程的人都可以帮助我吗?下面是我到目前为止完成的完整批处理程序。如果需要对我的程序进行一些修改以使其更简单,请毫不犹豫地进行修改。非常感谢你的帮助。谢谢
@echo off
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
pdftk *%%i.pdf cat output PDF\R_%%i.pdf owner_pw %random%
echo %%i R_%%i.pdf %random% >> passwords.csv
)
echo ***************************************************
echo * *
echo * PDF REPORTS SUCCESSFULLY GENERATED. *
echo * PLEASE TYPE EXIT AT COMMAND PROMPT. *
echo * *
echo ***************************************************
pause
exit
延迟扩展-在一个块中,任何%var%包括%random%都将在解析块(括号内的语句序列)时替换为其值 解决方案是使用语句调用
延迟扩展
SETLOCAL ENABLEDELAYEDEXPANSION
在@echo关闭后
然后您需要通过访问来访问随机
的变化值!随机的代码>而不是%random%
但是您需要向文件发送与密码和相同的随机值!随机的
将在每次访问时生成一个新值-因此您需要将变化的随机值放入变量中,并将存储在变量中的变化值用作CSV中的密码和数据
set pass=!random!
pdftk *%%i.pdf cat output PDF\R_%%i.pdf owner_pw !pass!
echo %%i R_%%i.pdf !pass! >> passwords.csv
当然,您需要!通过
not%pass%
访问pass
的新值,因为它在循环中变化
现在-随机数的长度可能为1-5位。您可能希望使用更长或恒定长度的密码
set pass=!random!!random!!random!!random!!random!!random!
将传递
设置为6到30位的字符串
set pass=!pass:~0,8!
将选择这些字符中的前8个。(少于8个字符的概率非常低)
编辑20130718T1446Z
嗯,有趣的小冒险。我刚刚解决了密码问题,这无疑是被以下语句误导了:“实际上,生成随机密码并将其存储到CSV文件是我遇到问题的地方”
好的-首先,没有必要同时列出*.txt和*.pdf。TXTtoPDF可执行文件只处理*.txt。然后熟食店。。。是的-将字母整齐地放在那里,去掉了前导字母和下划线,只留下数字部分
所以。。。为什么重复?首先,dir
将检查当前目录并构建匹配文件的列表,(我将截断)a_001、a_002、a_003…B_001、B_002…F_001、F_002、F_003,然后FOR将挑选001002003…001002003…001002003并处理它们。因此,001、002、003分别被处理6次。任何特定数字的最终处理将导致执行A_uu、B_u、…F_u,覆盖先前的x_999.PDF,因此在任何特定数字的情况下应用的最后一个密码将是最终版本
修订守则:
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET prevsuff=::
for /f "tokens=1,2 delims=_." %%i in ('dir ?_*.txt /b ^|sort /+2') do IF NOT !prevsuff!==%%j (
SET prevsuff=%%j
IF EXIST A_%%j.txt TXTtoPDF A_%%j.txt A_%%j.pdf -pps4 -pfs10.9
IF EXIST B_%%j.txt TXTtoPDF B_%%j.txt B_%%j.pdf -pps4 -pfs8.9
IF EXIST C_%%j.txt TXTtoPDF C_%%j.txt C_%%j.pdf -pps4 -plm50 -prm50 -pfs7.9
IF EXIST D_%%j.txt TXTtoPDF D_%%j.txt D_%%j.pdf -pps4 -plm60 -prm60 -pfs8.9
IF EXIST E_%%j.txt TXTtoPDF E_%%j.txt E_%%j.pdf -pps5 -pot -pfs10
IF EXIST F_%%j.txt TXTtoPDF F_%%j.txt F_%%j.pdf -pps5 -pot -pfs12
set pass=!random!!random!!random!!random!!random!!random!!random!!random!
set pass=!pass:~-8!
pdftk *%%j.pdf cat output PDF\R_%%j.pdf owner_pw !pass!
echo %%j R_%%j.pdf !pass! >> passwords.csv
)
GOTO :EOF
(好的-我已经删除了消息块frippery…)
最初,prevsuff
是st to:
——一个不可能是文件名的非空字符串。然后执行目录
,查找与?*.txt
匹配的所有文件,该列表按字母顺序排列在第二列--*.txt
上。因此,当FOR
处理数据时,将显示所有编号部分分组的行。它将前缀字母应用于%%i
,将数字部分应用于%%j
,因为delims
中有
。delims中的
从%%j
(好的,好的-这可能是编写的tokens=2delims=.
,它将数字部分应用于%%i
-针对感兴趣的人的练习…)
现在,如果数字部分(%%j
)与prevsuff
中的先前后缀
不匹配,则我们