我需要为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
有什么不对吗?
答案 0 :(得分:2)
由于我现在无法访问Windows系统,因此我目前的建议是:
c:\testreports
。c:\testreports
。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
。删除它以实际运行该程序。