2017-09-16 114 views
0

在此先感謝您提供的任何幫助。批處理腳本合併PDF與pdftk

通過搜索所有相關的線程和谷歌搜索後,我很難找到一個解決方案來輸出合併兩個PDF的變量名稱。

所以我有PDF格式的100的,我需要(在兩個時間)c:/test

的文件載列如下圖所示

Company Name Invoice No 123456 
Company Name Invoice No 123456 details 

現在,我已經成功地移動兩個文件夾中的結合一次到一個不同的文件夾併合並它們,但似乎無法得到desrired的輸出名稱我之後是將第一個合併文件名的前一個星期結束日期(或結束,而不是fussed)。下面是我迄今爲止工作的代碼,但輸出文件名是空白的,但是被創建。

很新的批量腳本並希望任何幫助:)

@echo off 

setlocal enableextensions enabledelayedexpansion 
set pdftk=C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe 

set Source=C:\test 
set Target=C:\test\test2 
set num=2 
set filenumber=1 

for /F "tokens=1,2 delims=:" %%f in ('dir /b /a-d "%source%\*.pdf" ^|  findstr /n "^" ') do (
    if %%f leq %num% (
     copy "%source%\%%g" "%target%" /y > nul 
    ) else goto endCopy 
) 

:endCopy 
endlocal 
for /F "tokens=1,2 delims=:" %%f in ('dir /b /a-d "%target%\*.pdf" ^|  findstr /n "^" ') do (
    if %%f leq %filenumber% (set file=%%~nA 
    ) 
) 
pdftk *.pdf cat output we_19_9_2017_%file%.pdf 
+0

使用錯誤的元變量。設置文件= %%〜ng – Squashman

+0

謝謝,但不幸的是,我仍然得到變量%文件的空白輸出% – manitou

+0

刪除'SETLOCAL'和'ENDLOCAL'行。他們不需要你使用的代碼。 %filenumber%變量在endlocal語句後不再定義。 – Squashman

回答

0

endCopy你想獲得的A的名字,而你與f迭代。使用set file=%%~nf爲第二個文件設置文件的名稱或set file=%%~ng

,並在端移動endlocal在這樣腳本年底擴大!file!(注意!):

:endCopy 
set "cmd=dir /b /a-d "%target%\*.pdf" ^| findstr /n "^"" 
for /F "tokens=1,2 delims=:" %%f in ('%cmd%') do if %%f leq %filenumber% set file=%%~nf 

pdftk *.pdf cat output we_19_9_2017_!file!.pdf 
endlocal 

瞭解更多關於DelayedExpansion在:https://ss64.com/nt/delayedexpansion.html

+0

感謝@ S.Ahmad的信息和建議,我修改了我的代碼,正如你所建議的,但我仍然得到一個空白的輸出文件。我在控制檯中運行你的代碼,並得到錯誤「FINDSTR:沒有搜索字符串」,我試過一些改動,但沒有運氣.......對錯誤的任何想法?感謝幫助! – manitou

+0

@manitou在你的腳本中,你正在傳遞雙引號給'findstr',它返回這個錯誤: 'dir/b | findstr/N「」 FINDSTR:無搜索字符串 您應該在'「^」之間添加搜索字符串,例如'「file ^」' – sohaib

0

最後的命令不使用目標文件夾作爲輸入文件,從而在當前文件夾中查找輸入文件,因此要麼包含路徑,要麼首先更改爲目標路徑。

此外,您還爲pdftk設置了一個路徑變量,但不要使用它。
如果此路徑未包含在%path%中,則無法找到。

試試這個(未經測試)

@echo off 
setlocal enableextensions enabledelayedexpansion 
set "pdftk=C:\Program Files (x86)\PDFtk Server\bin\pdftk.exe" 

set "Source=C:\test" 
set "Target=C:\test\test2" 
set num=2 
set filenumber=1 

for /F "tokens=1,2 delims=:" %%f in (
    'dir /b /a-d "%source%\*.pdf" ^| findstr /n "^" ' 
) do if %%f leq %num% (
    copy "%source%\%%g" "%target%" /y > nul 
) else goto endCopy 

:endCopy 
endlocal 
for /F "tokens=1,2 delims=:" %%f in (
    'dir /b /a-d "%target%\*.pdf" ^|findstr /n "^" ' 
) do if %%f leq %filenumber% set file=%%~nf 

PushD "%Target%" 
"%pdftk%" *.pdf cat output we_19_9_2017_%file%.pdf 
PopD 
+0

感謝@LotPings,當文件輸出時,變量%file%表示爲'1',即we_19_9_2017_1。難道我做錯了什麼? – manitou

+0

你最初設置filenumber爲1,最後如果禁止讓它變大,那麼你期望什麼? – LotPings