Войти

Показать полную графическую версию : Печать из директории


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

"C:\Program Files\Microsoft Office\Office14\WINWORD.EXE" *.doc /q /n /mFilePrintDefault /mFileExit

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

sunnykey
03-09-2013, 15:15
#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
Почему не проще: «-Include "*.doc","*.docx"» при «Get-ChildItem»? Или не «$_.Name -match "^.*\.docx?$"» (последнее, конечно, не проще ;))?

Аэровафли
03-09-2013, 16:59
А возможностями обычного .bat не получится? Просто с powershell вообще не знаком

Iska
03-09-2013, 17:14
А возможностями обычного .bat не получится? »
Аэровафли, пакетные файлы не умеют ShellExecute, всё одно понадобится утилита для этого.

Просто с powershell вообще не знаком »
1. Установить PowerShell (если не идёт в комплекте).
2. Однократно разрешить исполнение неподписанных скриптов, например:
Set-ExecutionPolicy RemoteSigned»
3. Сохранить код в файл с расширением «.ps1»:
#Save this file with ".ps1" extension »
4. Пользоваться.

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

Iska
04-09-2013, 10:53
1) Удалять все файлы в директории "Печать" после запуска скрипта и проведенной печати »
Зачем все? Только обработанные.

Слегка поправленный WSH код отсюда (http://forum.script-coding.com/viewtopic.php?pid=22001#p22001):
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
'=============================================================================
Следит за изменениями в каталоге.




© OSzone.net 2001-2012