Показать полную графическую версию : Печать файлов из каталогов на принтеры BAT-командами
alexansh
15-11-2013, 16:22
Подскажите, пожалуйста, как лучше, проще, оптимальнее осуществить печать из каталогов ?
Например, используя BAT - файл.
Дано, например, на сервере (Windows Server 2008):
1. 5 принтеров в сети и 10 сетевых каталогов
2. Периодически, в каждый из каталогов попадают файлы (по одному или по несколько)
Нужно:
Распечатывать файлы из каждого каталога на определенный принтер и затем удалять распечатанный файл.
Если в каталог попадает сразу несколько файлов, то каждый из этих файлов по очереди нужно распечатать и затем удалить.
Т.е., нужно сделать своеобразный конвейер печати и затем удаления файлов из каталогов.
alexansh
17-11-2013, 22:33
Текстовые файлы.
Смотрите примерную болванку кода:
Option Explicit
Dim strTargetFolder
Dim strPrinterName
Dim strComputer
Dim objSWbemLocator
Dim objSWbemServicesEx
Dim objSWbemEventSource
Dim objSWbemObjectEx
strTargetFolder = "C:\Обмен"
strPrinterName = "HP LaserJet 1200 Series PCL"
strComputer = "."
Set objSWbemLocator = WScript.CreateObject("WbemScripting.SWbemLocator")
Set objSWbemServicesEx = objSWbemLocator.ConnectServer(strComputer, "root\cimv2")
Set objSWbemEventSource = objSWbemServicesEx.ExecNotificationQuery( _
"SELECT * FROM __InstanceCreationEvent WITHIN 5 WHERE " & _
"TargetInstance ISA 'CIM_DirectoryContainsFile' AND " & _
"TargetInstance.GroupComponent = 'Win32_Directory.Name=""" & Replace(strTargetFolder, "\", "\\\\") & """'" _
)
WScript.Echo "Monitor files creation and Print documents in [" & strTargetFolder & "]..."
Do
With objSWbemServicesEx.Get(objSWbemEventSource.NextEvent.TargetInstance.PartComponent)
WScript.Echo Now() & " | > | New file: [" & .Name & "]"
Select Case UCase(.Extension)
Case "TXT"
PrintByNotepad .Name, strPrinterName
Case Else
' Nothing to do
End Select
WScript.Echo Now() & " | v | Delete file: [" & .Name & "]"
.Delete
End With
Loop
WScript.Quit 0
'=============================================================================
'=============================================================================
Sub PrintByNotepad(strFileName, strPrinterName)
WScript.CreateObject("WScript.Shell").Run """%SystemRoot%\System32\notepad.exe"" /pt """ & strFileName & """ """ & strPrinterName & """", 0, True
WScript.Echo Now() & " | # | Print file: [" & strFileName & "]"
End Sub
'=============================================================================
Детали в виде «несколько каталогов и несколько принтеров» подлежат разъяснению на предмет их связи.
alexansh
26-11-2013, 14:56
Iska, спасибо. Попробую.
Iska, а по мне так все понятно: два варианта вижу ясно
вариант номер раз.
дано
есть папки DIR1.1 DIR1.2, DIR2.1, DIR2.2, DIR2.3, DIR3 ... DIR100500.100500
есть принтеры PRINT1, PRINT2, PRINT3 ... PRINT100500
нужно
если файл упал в папки DIR1.1, DIR1.2 значит распечатать его на PRINT1, если в DIR2.1, DIR2.2, DIR 2.3 - на принтере PRINT2 и т.д. после распечатки файл удалить, в случае падения нескольких файлов распечатать их один за другим и точно так же удалить.
Вариант номер два
дано
есть папки DIR1, DIR2, DIR3 ... DIR100500
есть принтера PRINT1, PRINT2, PRINT3
нужно
если файл упал в вышеуказанные папки, его нужно распечатать на всех принтерах после распечатки файл удалить, в случае падения нескольких файлов распечатать их один за другим и точно так же удалить.
дополнительно в обоих пунктах желательно указать с какой интенсивностью сыпятся файлы (достаточно ли проверять их наличие раз в минуту, пять минут, два часа, полгода)
alexansh, какой из вариантов правильный?
мне, откровенно говоря, больше нравится первый, но вероятнее второй.
з.ы. если правильно сформулировать вопрос, то 90% ответа в нем уже будет.
если файл упал в папки DIR1.1, DIR1.2 значит распечатать его на PRINT1, если в DIR2.1, DIR2.2, DIR 2.3 - на принтере PRINT2 »
Elven, а почему не наоборот :lol:?
дополнительно в обоих пунктах желательно указать с какой интенсивностью сыпятся файлы (достаточно ли проверять их наличие раз в минуту, пять минут, два часа, полгода) »
Не нужно. В скрипте опрос идёт каждые пять секунд.
а почему не наоборот »
Iska, наоборот это как? если упал PRINT1 то все что было в папках DIR1.1, DIR1.2 печатать на PRINT2? Или какое наоборот имелось ввиду?
Не нужно. В скрипте опрос идёт каждые пять секунд. »
не заметил... сейчас буду перечитывать
alexansh
26-11-2013, 19:47
Elven, мой вариант как раз похож на ваш 1-ый вариант - с одноименного каталога файлы печатаются на одноименный принтер.
Дело в том, что необходимое дублирование каких-либо нужных нам файлов происходит на этапе "вбрасывания" их в каталоги. Т.е., на этом этапе и происходит сортировка всех нужных нам сообщений. Например, если есть необходимость печати одного и того же файла на 2-х или 3-х принтерах, то этот файл и "вбрасывают" сразу и в 1-ый каталог, и, например, во 3-ой каталог, и в 5-ый, к примеру. А уже сами каталоги, в свою очередь жестко привязываются только к одноименным принтерам. Вот такая задача.
Там, правда, есть ещё и другая задачка, цель которой состоит в разборе каждого файла и делении его на несколько более простых файлов из-за того, что в более крупном исходном файле содержится много однотипных сообщений, имеющих один и тот же формат, но отличающихся, естественно, по объему и содержанию. И эти однотипные сообщения нужно "вытаскивать" из больших файлов и затем их и распечатывать. Вот так.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.