Показать полную графическую версию : Печать из директории
Аэровафли
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}
Почему не проще: «-Include "*.doc","*.docx"» при «Get-ChildItem»? Или не «$_.Name -match "^.*\.docx?$"» (последнее, конечно, не проще ;))?
Аэровафли
03-09-2013, 16:59
А возможностями обычного .bat не получится? Просто с powershell вообще не знаком
А возможностями обычного .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) Запускать печать в фоном режиме (если это конечно возможно)
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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.