如何为2000个PDF文件添加密码

时间:2015-04-16 15:32:53

标签: batch-file pdf

我需要为2000个PDF文件添加密码(c:\ reports中的所有PDF文件)。

每个文件都应该有一个唯一的密码。同时,文件名和密码应保存在CSV列表中。

现在,我下载pdftk pro。这是程序:

ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION 
SET prevsuff=::

for /f "delims=, tokens=1,2 " %%i in (c:\reports ?_*.pdf) do 
  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 

有什么不对吗?

2 个答案:

答案 0 :(得分:2)

由于我现在无法访问Windows系统,因此我目前的建议是:

  1. 将代码更改为另一个目录,例如c:\testreports
  2. 创建目录c:\testreports
  3. 不是2000,而只是将5个不同的测试PDF文件放入新目录。
  4. 首先确保PDF测试文件名称非常简单(即没有空格,没有'有趣'字符)。
  5. 测试批处理文件。
  6. 如果成功运行,请添加一些测试PDF,这次使用与真实2000 PDF相似的“怪异”文件名。
  7. 再次测试。添加100个测试PDF文件。再试一次。
  8. 如果成功,请将注意力转移到c:\reports目录。不要忘记相应地更改批处理文件。

答案 1 :(得分:2)

我认为有。您忘记了for语句中的左括号。其次,如果您的文件名模式包含空格,则应引用它。所以这应该是:

for /f "delims=, tokens=1,2 " %%i in ("c:\reports ?_*.pdf") do (  

最后,我不明白为什么你引用循环变量%% i和%% j,如果你需要的只是一个文件名。如果你在循环中echo %%i, %%j,你会得到什么?

修改 好的,我想我现在理解你的意图了。看看这个:

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION 

for %%F in ("c:\reports ?_*.pdf") do (
    set pass=!random!!random!!random!!random!!random!!random!!random!!random!
    set pass=!pass:~-8!
    pdftk "%%F" cat output "PDF\R_%%F" owner_pw !pass!
    echo %%F,R_%%F.pdf,!pass! >> passwords.csv    
 )

的变化:
- 一个简单的FOR循环将循环遍历文件名
- 引用文件名模式以保护
内的空间 - 以大写形式循环变量,使其在视觉上非常出色 - 循环变量已经以.pdf扩展名结束 - 我在CSV文件的值之间添加了实际的逗号(“逗号分隔值”)以使其成为一个 - 最后不需要goto :EOF(除非某些代码在此行之后)

修改 我设置了示例文件,运行批处理文件并得到了这个输出:

@echo off

SETLOCAL ENABLEDELAYEDEXPANSION 

set filepattern="?_*.pdf"

REM cd /d C:\reports
cd /d d:\users\test

if exist passwords.csv del passwords.csv

for %%F in (%filepattern%) do (
    set pass=!random!!random!!random!!random!!random!!random!!random!!random!
    set pass=!pass:~-8!
    echo pdftk "%%~nxF" cat output "PDF\R_%%~nxF" owner_pw !pass!
    echo %%~dpnxF,R_%%~nxF.pdf,!pass! >> passwords.csv    
)

输出:
    d:\用户\试验> DIR
    Laufwerk的DatenträgerD:ist nano_D
    Volumeseriennummer:2866-D343

Verzeichnis von D:\Users\test

18.04.2015  15:10    <DIR>          .
18.04.2015  15:10    <DIR>          ..
18.04.2015  14:43               830 12_def.pdf
18.04.2015  14:43               608 1_abc.pdf
18.04.2015  14:43               774 24_ghi.pdf
18.04.2015  14:43               663 2_def.pdf
18.04.2015  14:43               718 3_ghi.pdf
18.04.2015  15:10               165 passwords.csv
18.04.2015  15:09               434 renpdf.cmd
               7 Datei(en),          4.192 Bytes
               2 Verzeichnis(se), 212.782.833.664 Bytes frei

D:\Users\test>renpdf
pdftk "1_abc.pdf" cat output "PDF\R_1_abc.pdf" owner_pw 48925581
pdftk "2_def.pdf" cat output "PDF\R_2_def.pdf" owner_pw 75025695
pdftk "3_ghi.pdf" cat output "PDF\R_3_ghi.pdf" owner_pw 34429279

D:\Users\test>type passwords.csv
D:\Users\test\1_abc.pdf,R_1_abc.pdf.pdf,48925581
D:\Users\test\2_def.pdf,R_2_def.pdf.pdf,75025695
D:\Users\test\3_ghi.pdf,R_3_ghi.pdf.pdf,34429279  

当然,因为我不想运行实际的pdftk程序,所以我在命令行前放了一个echo。删除它以实际运行该程序。