我有一个包含 PDF 文件的目录,如下所示:
2016_AAA_SomeRandomText1.pdf
2016_BBB_SomeRandomText1.pdf
2016_AAA_SomeRandomText2.pdf
2016_BBB_SomeRandomText2.pdf
2016_AAA_SomeRandomText3.pdf
2016_BBB_SomeRandomText3.pdf
...
注意:SomeRandomText3.pdf 会发生变化,但是是成对的。
因此,我想通过 Windows CLI 使用 FOR 循环遍历文件夹,并使用 PDFTK 为每对 SomeRandomText 生成一个 PDF 文件。因此,输出将如下所示:
2016_AAA_SomeRandomText1.pdf + 2016_BBB_SomeRandomText1.pdf = 2016_SomeRandomText1.pdf
2016_AAA_SomeRandomText2.pdf + 2016_BBB_SomeRandomText2.pdf = 2016_SomeRandomText2.pdf
2016_AAA_SomeRandomText3.pdf + 2016_BBB_SomeRandomText3.pdf = 2016_SomeRandomText3.pdf
...
这是我目前所拥有的(假设我在工作C:\user\pdfs
):
FOR /R %I IN (*.pdf) DO pdftk
答案1
这对我来说是有效的,经过测试:
替换"%~dp0"
为你的“实际”路径"C:\user\pdfs"
@echo off && cd /d "%~dp0"
for /f tokens^=1-3^delims^=_ %%i in ('^^^< nul where ".:*.pdf"')do if not exist "%%~i_%%~nk%%~xk" (
"C:\Program Files (x86)\PDFtk\bin\pdftk.exe" "%%~i_*_*%%~nk%%~xk" cat output "%%~i_%%~nk%%~xk"
)
for
此循环和条件的结果if
类似:
if not exist "2016_SomeRandomText1.pdf" (
"C:\Program Files (x86)\PDFtk\bin\pdftk.exe" "F:\2020-SU\Q1058228\2016_*_SomeRandomText1.pdf" cat output "F:\2020-SU\Q1058228\2016_SomeRandomText1.pdf"
)
答案2
我会告诉你我是如何在 bash 中做到这一点的,也许你可以翻译它。
我使用pdfunite
(比更直接一点pdftk
),但是一旦你弄清楚了语法,它就很容易了。
for AFILE in `ls 2016*AAA*.pdf`
## For each of the files starting with 2016_AAA
do
BFILE=`echo $AFILE | sed -e 's/AAA/BBB/'`
## I use stream editor to replace the AAA with BBB and define the
## new file name. You can probably use SUBSTITUTE in Win
pdftk $AFILE $BFILE cat output OUTPUT-$AFILE
## This will combine $AFILE and BFILE into OUTPUT-AFILE
done
希望这可以给你一个开始。