Компьютерный форум 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=272114)

alexansh 15-11-2013 16:22 2255255

Печать файлов из каталогов на принтеры BAT-командами
 
Подскажите, пожалуйста, как лучше, проще, оптимальнее осуществить печать из каталогов ?
Например, используя BAT - файл.

Дано, например, на сервере (Windows Server 2008):
1. 5 принтеров в сети и 10 сетевых каталогов
2. Периодически, в каждый из каталогов попадают файлы (по одному или по несколько)

Нужно:
Распечатывать файлы из каждого каталога на определенный принтер и затем удалять распечатанный файл.
Если в каталог попадает сразу несколько файлов, то каждый из этих файлов по очереди нужно распечатать и затем удалить.

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

Iska 15-11-2013 17:39 2255297

Какие именно файлы?

alexansh 17-11-2013 22:33 2256762

Текстовые файлы.

Iska 21-11-2013 04:33 2258959

Смотрите примерную болванку кода:
читать дальше »
Код:

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 2261865

Iska, спасибо. Попробую.

Elven 26-11-2013 15:20 2261877

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% ответа в нем уже будет.

Iska 26-11-2013 15:32 2261883

Цитата:

Цитата Elven
если файл упал в папки DIR1.1, DIR1.2 значит распечатать его на PRINT1, если в DIR2.1, DIR2.2, DIR 2.3 - на принтере PRINT2 »

Elven, а почему не наоборот :lol:?


Цитата:

Цитата Elven
дополнительно в обоих пунктах желательно указать с какой интенсивностью сыпятся файлы (достаточно ли проверять их наличие раз в минуту, пять минут, два часа, полгода) »

Не нужно. В скрипте опрос идёт каждые пять секунд.

Elven 26-11-2013 15:55 2261894

Цитата:

Цитата Iska
а почему не наоборот »

Iska, наоборот это как? если упал PRINT1 то все что было в папках DIR1.1, DIR1.2 печатать на PRINT2? Или какое наоборот имелось ввиду?
Цитата:

Цитата Iska
Не нужно. В скрипте опрос идёт каждые пять секунд. »

не заметил... сейчас буду перечитывать

alexansh 26-11-2013 19:47 2262012

Elven, мой вариант как раз похож на ваш 1-ый вариант - с одноименного каталога файлы печатаются на одноименный принтер.
Дело в том, что необходимое дублирование каких-либо нужных нам файлов происходит на этапе "вбрасывания" их в каталоги. Т.е., на этом этапе и происходит сортировка всех нужных нам сообщений. Например, если есть необходимость печати одного и того же файла на 2-х или 3-х принтерах, то этот файл и "вбрасывают" сразу и в 1-ый каталог, и, например, во 3-ой каталог, и в 5-ый, к примеру. А уже сами каталоги, в свою очередь жестко привязываются только к одноименным принтерам. Вот такая задача.

Там, правда, есть ещё и другая задачка, цель которой состоит в разборе каждого файла и делении его на несколько более простых файлов из-за того, что в более крупном исходном файле содержится много однотипных сообщений, имеющих один и тот же формат, но отличающихся, естественно, по объему и содержанию. И эти однотипные сообщения нужно "вытаскивать" из больших файлов и затем их и распечатывать. Вот так.


Время: 09:28.

Время: 09:28.
© OSzone.net 2001-