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

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

Аэровафли 03-09-2013 15:06 2212021

Печать из директории
 
Есть папка "C:\Обмен\!Бланки\Печать\" туда сотрудники копируют файлы формата .doc и .docx. Нужно распечатать все файлы doc и docx при запуске батника.

Цитата:

"C:\Program Files\Microsoft Office\Office14\WINWORD.EXE" *.doc /q /n /mFilePrintDefault /mFileExit
Пытался таким образом это провернуть, но печатает только один файл.(

sunnykey 03-09-2013 15:15 2212024

Код:

#Powershell script.
#Don't forget unlock script executing by
#using command "Set-ExecutionPolicy RemoteSigned" or "Set-ExecutionPolicy Unrestricted"
#Save this file with ".ps1" extension
gci "C:\Обмен\!Бланки\Печать\*" | ? {($_.Name -like "*.doc") -or ($_.Name -like "*.docx")} | % {Start-Process $_.FullName -Verb Print}


Iska 03-09-2013 16:00 2212042

Почему не проще: «-Include "*.doc","*.docx"» при «Get-ChildItem»? Или не «$_.Name -match "^.*\.docx?$"» (последнее, конечно, не проще ;))?

Аэровафли 03-09-2013 16:59 2212069

А возможностями обычного .bat не получится? Просто с powershell вообще не знаком

Iska 03-09-2013 17:14 2212078

Цитата:

Цитата Аэровафли
А возможностями обычного .bat не получится? »

Аэровафли, пакетные файлы не умеют ShellExecute, всё одно понадобится утилита для этого.

Цитата:

Цитата Аэровафли
Просто с powershell вообще не знаком »

1. Установить PowerShell (если не идёт в комплекте).
2. Однократно разрешить исполнение неподписанных скриптов, например:
Цитата:

Цитата sunnykey
Код:

Set-ExecutionPolicy RemoteSigned
»

3. Сохранить код в файл с расширением «.ps1»:
Цитата:

Цитата sunnykey
#Save this file with ".ps1" extension »

4. Пользоваться.

Аэровафли 04-09-2013 10:11 2212458

Спасибо огромное!
Можно попросить еще два косметических изменения к скрипту? Могу пару бутылочку пива накинуть на телефон взамен ,))
1) Удалять все файлы в директории "Печать" после запуска скрипта и проведенной печати
2) Запускать печать в фоном режиме (если это конечно возможно)

Iska 04-09-2013 10:53 2212474

Цитата:

Цитата Аэровафли
1) Удалять все файлы в директории "Печать" после запуска скрипта и проведенной печати »

Зачем все? Только обработанные.

Слегка поправленный WSH код отсюда:
читать дальше »
Код:

Option Explicit

Dim strTargetFolder
Dim strComputer

Dim objSWbemServicesEx
Dim objSWbemEventSource
Dim objSWbemObjectEx_Event
Dim objSWbemObjectEx_CIM_DataFile


strTargetFolder = "C:\Обмен\!Бланки\Печать"
strComputer    = "."

Set objSWbemServicesEx = GetObject("WinMgmts:\\" & 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
        Set objSWbemObjectEx_Event = objSWbemEventSource.NextEvent
        Set objSWbemObjectEx_CIM_DataFile = objSWbemServicesEx.Get(objSWbemObjectEx_Event.TargetInstance.PartComponent)
       
        WScript.Echo Now() & " |  | New file:    [" & objSWbemObjectEx_CIM_DataFile.Name & "]"
       
        Select Case UCase(objSWbemObjectEx_CIM_DataFile.Extension)
                Case "DOC", "DOCX"
                        PrintByWord  objSWbemObjectEx_CIM_DataFile.Name
                Case "XLS", "XLSX"
                        PrintByExcel objSWbemObjectEx_CIM_DataFile.Name
                Case Else
                        ' Nothing to do
        End Select
       
        WScript.Echo Now() & " |  | Delete file: [" & objSWbemObjectEx_CIM_DataFile.Name & "]"
        objSWbemObjectEx_CIM_DataFile.Delete
Loop

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub PrintByWord(strFileName)
        Const wdDoNotSaveChanges = 0
       
        Dim objWord
        Dim objDoc
       
        Set objWord = WScript.CreateObject("Word.Application")
       
        WScript.Echo Now() & " |  | Print file:  [" & strFileName & "]"
       
        With objWord
                Set objDoc = .Documents.Open(strFileName, False, True, False)
               
                objDoc.PrintOut True
               
                Do
                        WScript.Sleep 500
                Loop Until .BackgroundPrintingStatus = 0
               
                Set objDoc = Nothing
               
                .Quit wdDoNotSaveChanges
        End With
       
        Set objWord = Nothing
End Sub
'=============================================================================

'=============================================================================
Sub PrintByExcel(strFileName)
        Dim objExcel
        Dim objWorkbook
       
        Set objExcel = WScript.CreateObject("Excel.Application")
       
        WScript.Echo Now() & " |  | Print file:  [" & strFileName & "]"
       
        With objExcel
                Set objWorkbook = .Workbooks.Open(strFileName, 0, True)
               
                objWorkbook.PrintOut
                objWorkbook.Saved = True
               
                Set objWorkbook = Nothing
               
                .Quit
        End With
       
        Set objExcel = Nothing
End Sub
'=============================================================================


Следит за изменениями в каталоге.


Время: 16:50.

Время: 16:50.
© OSzone.net 2001-