PDA

Показать полную графическую версию : Работа с циклом в BAT файле


mforim
31-12-2017, 15:27
Добрый день!

Есть задача пройтись программой по файлам и объединить их в единый pdf файл.
Для этого нашел программу prince, которая может помочь и у которой есть возможность работы с командной строкой.
Подходит в данном случае только она (других перепробовал много; связано с особенностью задачи).

Данный скрипт работает отлично.

@ECHO OFF
SetLocal EnableDelayedExpansion
prince^
D:\finalWEB\xml\page1.html^
D:\finalWEB\xml\page2.html^
D:\finalWEB\xml\page3.html^
D:\finalWEB\xml\page4.html^
-o D:\finalPDF\final.pdf
Stop
EndLocal


то есть как и сказано в документации здесь: (https://www.princexml.com/doc/command-line/)
prince doc1.html doc2.html -o out.pdf
Combine doc1.html and doc2.html into a single PDF file, out.pdf.

Пробовал сделать что-то с циклом такое:

@ECHO OFF
SetLocal EnableDelayedExpansion
prince^
FOR /L %%i IN (1, 1, 500) DO (
SET num=%%x
D:\finalWEB\xml\page!num!.html^
)
-o D:\finalPDF\final.pdf
Stop
EndLocal


Из очевидных проблем: цикл не работает потому что я соединяю в строку prince и FOR))

Буду рад помощи!

Iska
31-12-2017, 18:32
mforim, ну, например, Вы можете собрать список и использовать его:
@echo off
setlocal enableextensions enabledelayedexpansion

call :GetTemporaryName

>"%TemporaryName%" (
for /f "usebackq delims=" %%i in (`2^>nul dir /a:-d /b "*.htm*"`) do echo %%~fi
)

"%ProgramFiles%\prince-11.3.1-win64\bin\prince.exe" --input=html --input-list="%TemporaryName%" --output="Result.pdf"

del /f /q "%TemporaryName%"

endlocal
exit /b 0

rem ==========================================================================
rem Функция GetTemporaryName()
rem
rem Серый форум / CMD/BAT: генерация пути для временного файла или папки
rem (http://forum.script-coding.com/viewtopic.php?id=6259)
rem ==========================================================================
:GetTemporaryName
setlocal enableextensions enabledelayedexpansion

:NextName
set sTempName=%temp%\temp%random%.tmp

if exist "%sTempName%" goto :NextName

set sProcName=%~0

endlocal & set %sProcName:~4%=%sTempName%
exit /b 0
rem ==========================================================================
или, для Вашего случая нумерованных файлов, вместо for /f:
>"%TemporaryName%" (
for /l %%i in (1, 1, 500) do echo d:\finalWEB\xml\page%%~i.html
)


Проблемы, как обычно, возникнут с именами на кириллице.




© OSzone.net 2001-2012