Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Печать pdf-файлов из командной строки.

Ответить
Настройки темы
CMD/BAT - [решено] Печать pdf-файлов из командной строки.

Экзорцист


Сообщения: 969
Благодарности: 127

Профиль | Отправить PM | Цитировать


Начало здесь
В определенный каталог пользователь выкладывает pdf-файлы.
Надо в автоматическом режиме их печатать из командной строки (скриптом в шедулере)
Можно сделать так:
Код: Выделить весь код
"c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /n /t c:\temp\print\small.pdf
Но после печати процесс Adobe Acrobat Reader не завершается, соответственно батник "замирает".
Решил переносить файлы в подкаталог и оттуда их печатать, а удалять другим скриптом (где-нибудь в автозагрузке).
Проблема в том, что файлы могут быть до 50Мб и, чисто теоретически, процесс переноса может быть запущен в том момент, когда копирование в подкаталог еще не завершилось. Поэтому файл переименовываю в каталоге, проверяю на ошибку переименования (файл "занят"), потом переношу и из подкаталога печатаю.
Получилось следующим образом:
Код: Выделить весь код
echo off
Setlocal EnableDelayedExpansion
rem имя файла для печати
set FileNameForPrint=0
rem каталог, в который пользователь помещает файлы
set DirNameForPrint=d:\printer\
rem каталог, куда перемещается файл, который надо распечатать и удалить, является подкаталогом для DirNameForPrint
set DirNameForDel=d:\printer\del\
cd /d %DirNameForPrint%
FOR %%i IN (*.pdf) DO (
	set FileNameForPrint="%%~ni__!random!".pdf
	rename "!DirNameForPrint!%%i" "!FileNameForPrint!"
	if %ERRORLEVEL% EQU 0 (
	move /y "!DirNameForPrint!!FileNameForPrint!" "!DirNameForDel!"
	!ProgramFiles!\print_job\nircmd.exe shexec "print" "!DirNameForDel!!FileNameForPrint!"
		)

	)
Скрипт в шедулере с повторением каждые 2 минуты.
Так же в шедулере скрипт очистки подкаталога с запуском при включении компьютера
Код: Выделить весь код
del /f /q d:\printer\del\*.*
Имеет право на жизнь? Пока вроде работает.
P.S. странно, но справка по if (if /?) выдает, что для сравнения нужна команда EQL, хотя по факту - EQU

Отправлено: 11:46, 01-02-2019

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Michael:
Имеет право на жизнь? »
Неа. Рано или поздно столкнётесь с ошибками. Смотрите ссылку на тему на Сером форуме, которую я приводил в прошлой теме — скрипт следит за каталогом в синхронном режиме.

Цитата Michael:
P.S. странно, но справка по if (if /?) выдает, что для сравнения нужна команда EQL, хотя по факту - EQU »
Это очень, очень старая история. Все через это проходят.

Отправлено: 12:35, 01-02-2019 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Экзорцист


Сообщения: 969
Благодарности: 127

Профиль | Отправить PM | Цитировать


Iska, не, пожалуй буду решать проблемы по мере их поступления. Но за ссылку спасибо

Отправлено: 13:07, 01-02-2019 | #3


Ветеран


Contributor


Сообщения: 2709
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Michael,
Вот вариант, вроде бы хватает одного батника
Код: Выделить весь код
@Echo Off
cls
	Set "BoxIn=Z:\Box_In"
	Set "Mask=*.pdf"

	Set /A Repeat=60
	Set /A Waiting=30

	Set "PRG="c:\Program Files (x86)\Adobe\Reader 11.0\Reader\AcroRd32.exe" /n /t"
rem	Set "PRG="C:\Program Files\Adobe\Acrobat Reader DC\Reader\AcroRd32.exe" /n /t"

	:Begin
		If Not Exist "%BoxIn%\Tmp" Md "%BoxIn%\Tmp"	
       	        FOR /F "usebackq delims=" %%f IN (`2^>nul Dir /b /a:-D "%BoxIn%\%Mask%"`) DO (
			Move /Y "%BoxIn%\%%f" "%BoxIn%\Tmp\%%f" >NUL &&Call :Out "%BoxIn%\Tmp\%%f" %Waiting%
		)
		Timeout /T %Repeat%
rem		CHOICE /C YN /T %Repeat% /D Y /M "Y-Продолжить работу,  N-Завершить командный файл"
rem		If %ErrorLevel%==2 Exit /B 2
	GoTo :Begin
Exit /B

:Out
	Start " " %PRG% %1
	:OutWait
		Timeout /T %2
		Del %1 >nul 2>&1
		If Exist %1 GoTo :OutWait
Exit /B
Цитата Michael:
В определенный каталог пользователь выкладывает pdf-файлы. »
В этом каталоге организуем каталог TMP. Туда переносим последовательно файл пользователя. При благополучном переносе запускаем акробата. Даём время для его загрузки (у меня Set /A Waiting=30) сек. Пытаемся удалить файл. Если акробат не отработал, файл будет занят и не удалится. С задержками будем пытаться удалить файл, пока не добьемся успеха. Переходим к обработке следующего файла. Если список файлов исчерпан, повторим батник через некоторое время (у меня Set /A Repeat=60) сек.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:46, 01-02-2019 | #4


Ветеран


Contributor


Сообщения: 2709
Благодарности: 1684

Профиль | Отправить PM | Цитировать


Michael, простите великодушно за неуместное любопытство: а зачем вообще эта возня, если файлы печатаете в автоматическом режиме? Почему сразу не поставить пользователям сетевой принтер и акробат? Имхо, акробат, или нечто подобное, должен присутствовать у каждого. По крайней мере, у тех пользователей, которым приходится в конечном итоге отправлять pdf на печать.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Отправлено: 12:11, 02-02-2019 | #5


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


megaloman, пользователь может на удалёке/ в филиале за 1000 км формировать документы. А местный персонал на них только печать ставит.

Отправлено: 14:57, 02-02-2019 | #6


Экзорцист


Сообщения: 969
Благодарности: 127

Профиль | Отправить PM | Цитировать



Цитата megaloman:
а зачем вообще эта возня, если файлы печатаете в автоматическом режиме? »
Есть острая необходимость раз в месяц распечатать порядка 8000 страниц, причем чем быстрее - тем лучше,
Есть старенькая тошиба, которую не удалось подцепить на сервер печати под управлением windows server 2008R2, но, во-первых, выкидывать ее жалко, во-вторых - файлы на печать изначально формируются в pdf-формате. Решил заморочиться

Отправлено: 10:18, 06-02-2019 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Печать pdf-файлов из командной строки.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Запуск командной строки от имени Администратора из командной строки emcee Microsoft Windows 8 и 8.1 12 06-05-2023 07:36
2007 - [решено] Печать из командной строки. valcher Microsoft Office (Word, Excel, Outlook и т.д.) 4 11-08-2018 17:55
CMD/BAT - запуск командной строки от имени администратора из командной строки jah Скриптовые языки администрирования Windows 18 19-09-2015 08:59
Создание .torrent-файлов из командной строки D_Master Хочу все знать 7 18-02-2009 23:20
Печать файлов из командной строки Loki3D Microsoft Windows NT/2000/2003 4 12-07-2007 08:55




 
Переход