Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Работа с циклом в BAT файле (http://forum.oszone.net/showthread.php?t=332228)

mforim 31-12-2017 15:27 2788255

Работа с циклом в BAT файле
 
Добрый день!

Есть задача пройтись программой по файлам и объединить их в единый 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

то есть как и сказано в документации здесь:
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 2788270

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
)



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


Время: 13:02.

Время: 13:02.
© OSzone.net 2001-