2017-04-12 89 views
0

我試圖自動執行一個非常特定的任務:檢查任何有奇數頁的PDF文件夾。每個PDF都是文檔的一部分,我希望每個部分都從右側開始。批處理文件+ cPDF查找多個PDF頁面的數量

我選擇CPDF作爲一個簡單的PDF命令行工具,並寫下了如下的命令行:

for %f in (*.pdf) do cpdf -pages %f" 

已完成眼前的任務,今天我可以看看倒在命令行窗口中輸出,看看哪些文件有奇數個頁面。但是我是辦公室裏唯一一個能夠使用這個功能的人,除非我能將它變成一個雙擊過程,然後顯示一個更簡單/更清晰的輸出。所以我想我會寫一個批處理文件:

for %%f in (*.pdf) do cpdf -pages %%f >> ".\pages.txt" 

是我第一次嘗試,但它寫的一個連續的線剛剛頁面的數量,所以我無法讀取該文件有多少頁。

如何將文件名添加到輸出並將每個結果放在單獨的行上?甚至更好

Number of pages: 
fileA.pdf 6 
fileB.pdf 8 
fileC.pdf 7 
fileC.pdf 10 
fileD.pdf 13 
fileE.pdf 2 

回答

0

這一批應該只輸出與奇數頁號文件:

@Echo off 
SetLocal EnableDelayedExpansion 
(Echo Number of pages: 
for %%f in (*.pdf) do For /F "delims=" %%p in ('cpdf -pages %%f') Do (
    Set /A rest=%%p %% 2 
    If !rest! equ 1 Echo %%f %%p 
))> ".\pages.txt" 

編輯插入缺失)
隨着CPDF的免費版本,你需要改變的命令:

for %%f in (*.pdf) do For /F "skip=1 delims=" %%p in ('cpdf -pages %%f') Do (

要跳過此示例輸出:

> cpdf -pages .\cpdfmanual.pdf 
This demo is for evaluation only. http://www.coherentpdf.com/ 
70 

EDIT2根據this answer PDFTK是一個真正的自由選擇:

@Echo off 
SetLocal EnableDelayedExpansion 
(Echo Number of pages: 
for %%f in (*.pdf) do For /F "tokens=2 delims=: " %%p in (
    'pdftk %%f dump_data ^| findstr "NumberOfPages" ' 
) Do (
    Set /A rest=%%p %% 2 
    If !rest! equ 1 Echo %%f %%p 
))> ".\pages.txt" 
+0

LotPings,謝謝你的批次。當我運行它時,它不會創建「pages.txt」。 cmd窗口暫時彈出,但隨後關閉。我只是將你的代碼複製粘貼到一個文本文件中,並將其重命名爲「test.bat」。 – ledisnomad

+0

感謝您的反饋,缺少一個右括號。上面改變了。你使用免費版的cPDF?然後你需要在'delims ='前面插入一個'skip = 1'。 – LotPings