Michael
01-02-2019, 11:46
Начало здесь (http://forum.oszone.net/post-2855324-6.html)
В определенный каталог пользователь выкладывает 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
В определенный каталог пользователь выкладывает 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