Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Сканирование документов с помощью скрипта

Ответить
Настройки темы
VBS/WSH/JS - [решено] Сканирование документов с помощью скрипта

Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

читать дальше »
Код: Выделить весь код
Option Explicit

Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"


Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

Dim strPath2Save
Dim strFormat
Dim intQuality
Dim intDPI
Dim intHorizontalSize
Dim intVerticalSize



strPath2Save      = "Z:\Отсканированные документы\1.jpg"      
strFormat         = wiaFormatJPEG         
intQuality        = 80                 
intDPI            = 300                 
intHorizontalSize = (210 / 25.4) * intDPI 
intVerticalSize   = (297 / 25.4) * intDPI 


Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
Set objDeviceInfos = objDeviceManager.DeviceInfos

If objDeviceInfos.Count > 0 Then
 
     Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
    
    If Not objDevice Is Nothing Then
      
        
        With objDevice
            With .Items(1)
                '
                With .Properties
                    .Item("6146").Value = ColorIntent             
                   
                    .Item("6147").Value = intDPI                  
                    .Item("6148").Value = intDPI               
                    
 
                    .Item("6149").Value = 0                       
                    .Item("6150").Value = 0                       
                    
    
                End With
                
                
                Set objImageFile = .Transfer()
                
     

                
                Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
                
                With objImageProcess
                    With .Filters
                        .Add objImageProcess.FilterInfos("Convert").FilterID
                        
                        With .Item(1).Properties
                            .Item("FormatID").Value = strFormat  
                            .Item("Quality").Value  = intQuality 
                        End With
                    End With
                    
                    Set objImageFile = .Apply(objImageFile)
                End With
            End With
        End With
        

        With WScript.CreateObject("Scripting.FileSystemObject")
            If .FileExists(strPath2Save) Then
                .DeleteFile strPath2Save
            End If
        End With
        
    
        objImageFile.SaveFile strPath2Save
        
        WScript.Echo "Complete."
        
        Set objDevice = Nothing
    Else
        WScript.Echo "Cancel scanning by user"
    End If
Else
    WScript.Echo "No connected devices"
End If

Set objDeviceManager = Nothing
Set objDeviceInfos   = Nothing

WScript.Quit 0


И было бы отлично, если скрипт определял наличие папки в папке, то есть находясь в "Z:\Отсканированные документы\" он создавал папку с сегодняшним числом, а если папка уже создана, просто сканировал бы документы сразу в неё.

читать дальше »
Код: Выделить весь код
Option Explicit

 Dim strDateTime  
 Dim strpath
         
strDateTime=Right("00" & DatePart("d",Date),2) & "-" & _ 
Right("00" & DatePart("m",Date),2) & "-" & _ 
DatePart("yyyy",Date)

strpath = "Z:\Отсканированные документы\" + strDateTime

Помогите, пожалуйста, доработать.
WScript.Quit 0

Отправлено: 13:10, 31-03-2014

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата magnum888:
а нужно чтобы файл получал следующий порядковый номер. »
Цитата magnum888:
И было бы отлично, если скрипт определял наличие папки в папке, то есть находясь в "Z:\Отсканированные документы\" он создавал папку с сегодняшним числом, а если папка уже создана, просто сканировал бы документы сразу в неё. »
Мы сделаем иначе. Создание папки лежит на совести пользователя. Файлы получают имена по шаблону «ScanImage_YYYYMMDDHHMMSS.jpg»:
читать дальше »
Код: Выделить весь код
Option Explicit

Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"


Dim objFSO

Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

Dim strPath2Save
Dim strFormat
Dim intQuality
Dim intDPI
Dim intHorizontalSize
Dim intVerticalSize


' Задаём характеристики изображения
strPath2Save      = "Z:\Отсканированные документы" ' Путь к папке для сохранения
strFormat         = wiaFormatJPEG                  ' Формат файла — *.jpg
intQuality        = 80                             ' Качество jpg
intDPI            = 300                            ' Разрешение — 300 dpi
intHorizontalSize = (210 / 25.4) * intDPI          ' Размер по горизонтали — A4
intVerticalSize   = (297 / 25.4) * intDPI          ' Размер по вертикали — A4

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strPath2Save) Then
	Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
	Set objDeviceInfos = objDeviceManager.DeviceInfos
	
	If objDeviceInfos.Count > 0 Then
		' Выбираем устройство для сканирования. Если оно единственное, то сие произойдёт без отображения диалога.
		Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
		
		If Not objDevice Is Nothing Then
			WScript.Echo objDevice.Properties.Item("Name") & " [" & objDevice.DeviceID & "]"
			WScript.Echo "Scanning..."
			
			With objDevice
				With .Items(1)
					' Задаём требуемые характеристики изображения для сканирования
					With .Properties
						.Item("6146").Value = ColorIntent             ' Цветовая модель (Current Intent)
						
						' Разрешение…
						.Item("6147").Value = intDPI                  ' …по горизонтали (Horizontal Resolution)
						.Item("6148").Value = intDPI                  ' …по вертикали (Vertical Resolution)
						
						' Начало области сканирования…
						.Item("6149").Value = 0                       ' …по горизонтали (Horizontal Start Position)
						.Item("6150").Value = 0                       ' …по вертикали (Vertical Start Position)
						
						' Размер области сканирования…
						.Item("6151").Value = intHorizontalSize       ' …по горизонтали (Horizontal Extent)
						.Item("6152").Value = intVerticalSize         ' …по вертикали (Vertical Extent)
					End With
					
					' Инициируем начало операции сканирования
					Set objImageFile = .Transfer()
					
					' Конвертируем полученное изображение
					WScript.Echo "Converting..."
					
					Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
					
					With objImageProcess
						With .Filters
							.Add objImageProcess.FilterInfos("Convert").FilterID
							
							With .Item(1).Properties
								.Item("FormatID").Value = strFormat  ' Формат изображения
								.Item("Quality").Value  = intQuality ' Качество изображения
							End With
						End With
						
						Set objImageFile = .Apply(objImageFile)
					End With
				End With
			End With
			
			' Сохраняем полученное изображение
			objImageFile.SaveFile objFSO.BuildPath(strPath2Save, "ScanImage_" & FormatLocalDateTime() & ".jpg")
			
			WScript.Echo "Complete."
			
			Set objDevice = Nothing
		Else
			WScript.Echo "Cancel scanning by user"
		End If
	Else
		WScript.Echo "No connected devices"
	End If
	
	Set objDeviceManager = Nothing
	Set objDeviceInfos   = Nothing
Else
	WScript.Echo "Папка для сохранения результатов сканирования [" & strPath2Save & "] не найдена."
	WScript.Quit 1
End If

Set objFSO = Nothing

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

'=============================================================================
Function FormatLocalDateTime()
	Dim objSWbemObjectEx
	
	For Each objSWbemObjectEx In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("SELECT LocalDateTime FROM Win32_OperatingSystem")
		FormatLocalDateTime = Left(objSWbemObjectEx.LocalDateTime, 8 + 6)
		
		Exit For
	Next
End Function
'=============================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:25, 31-03-2014 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Спасибо, файлы теперь не перезаписываются, но в названии файла получается следующее "ScanImage_20140401084424.jpg", как изменить функцию, чтобы было хоть какое-то разделение между числами, и если можно, оставить только время.

Отправлено: 08:52, 01-04-2014 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


В таком виде: «ScanImage_20140401_084424.jpg» — устроит?
Цитата magnum888:
и если можно, оставить только время. »
Не стоит. Не надейтесь, что Вы никогда не наткнётесь на дублирование, если оставите только время. Даже нынешний вариант гож только для сканирования с одного рабочего места, а с нескольких — опять же могут появиться дубликаты.

Отправлено: 09:00, 01-04-2014 | #4


Новый участник


Сообщения: 4
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Iska:
В таком виде: «ScanImage_20140401_084424.jpg» — устроит? »
Дату хотелось бы убрать за ненадобностью, лишняя информация, а разделители нужны, чтобы можно было легко разобрать время когда было совершенно сканирование. В названии я убрал "ScanImage" осталась дата и время.

Отправлено: 09:38, 01-04-2014 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата magnum888:
Дату хотелось бы убрать за ненадобностью, лишняя информация, »
Не лишняя. Как пару-тройку раз наткнётесь на ошибку времени исполнения при дублировании имён — передумаете. Городить же огород с подсчётом существующего количества файлов, да учитывать наличие возможных пропусков в нумерации после удаления — вот это действительно в данном случае лишнее.

Цитата magnum888:
а разделители нужны, чтобы можно было легко разобрать время когда было совершенно сканирование »
Я и так более чем отчётливо вижу — в «8:44:24». А Вы? О двоеточии в качестве разделителя точно забудьте — данный символ недопустим в именах файлов.

Кстати, дата и время превосходно смотрятся в свойствах файла. В имени же дата/время у нас используются а) для исключения дублирования имён и б) для корректной сортировки в Проводнике. Не более.

Пробуйте:
читать дальше »
Код: Выделить весь код
Option Explicit

Const ScannerDeviceType = 1
Const ColorIntent = 1
Const wiaFormatJPEG = "{B96B3CAE-0728-11D3-9D7B-0000F81EF32E}"


Dim objFSO

Dim objDeviceManager
Dim objDeviceInfos
Dim objDevice

Dim objImageFile
Dim objImageProcess

Dim strPath2Save
Dim strFormat
Dim intQuality
Dim intDPI
Dim intHorizontalSize
Dim intVerticalSize


' Задаём характеристики изображения
strPath2Save      = "Z:\Отсканированные документы" ' Путь к папке для сохранения
strFormat         = wiaFormatJPEG                  ' Формат файла — *.jpg
intQuality        = 80                             ' Качество jpg
intDPI            = 300                            ' Разрешение — 300 dpi
intHorizontalSize = (210 / 25.4) * intDPI          ' Размер по горизонтали — A4
intVerticalSize   = (297 / 25.4) * intDPI          ' Размер по вертикали — A4

Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")

If objFSO.FolderExists(strPath2Save) Then
	Set objDeviceManager = WScript.CreateObject("WIA.DeviceManager")
	Set objDeviceInfos = objDeviceManager.DeviceInfos
	
	If objDeviceInfos.Count > 0 Then
		' Выбираем устройство для сканирования. Если оно единственное, то сие произойдёт без отображения диалога.
		Set objDevice = WScript.CreateObject("WIA.CommonDialog").ShowSelectDevice(ScannerDeviceType, False, False)
		
		If Not objDevice Is Nothing Then
			WScript.Echo objDevice.Properties.Item("Name") & " [" & objDevice.DeviceID & "]"
			WScript.Echo "Scanning..."
			
			With objDevice
				With .Items(1)
					' Задаём требуемые характеристики изображения для сканирования
					With .Properties
						.Item("6146").Value = ColorIntent             ' Цветовая модель (Current Intent)
						
						' Разрешение…
						.Item("6147").Value = intDPI                  ' …по горизонтали (Horizontal Resolution)
						.Item("6148").Value = intDPI                  ' …по вертикали (Vertical Resolution)
						
						' Начало области сканирования…
						.Item("6149").Value = 0                       ' …по горизонтали (Horizontal Start Position)
						.Item("6150").Value = 0                       ' …по вертикали (Vertical Start Position)
						
						' Размер области сканирования…
						.Item("6151").Value = intHorizontalSize       ' …по горизонтали (Horizontal Extent)
						.Item("6152").Value = intVerticalSize         ' …по вертикали (Vertical Extent)
					End With
					
					' Инициируем начало операции сканирования
					Set objImageFile = .Transfer()
					
					' Конвертируем полученное изображение
					WScript.Echo "Converting..."
					
					Set objImageProcess = WScript.CreateObject("WIA.ImageProcess")
					
					With objImageProcess
						With .Filters
							.Add objImageProcess.FilterInfos("Convert").FilterID
							
							With .Item(1).Properties
								.Item("FormatID").Value = strFormat  ' Формат изображения
								.Item("Quality").Value  = intQuality ' Качество изображения
							End With
						End With
						
						Set objImageFile = .Apply(objImageFile)
					End With
				End With
			End With
			
			' Сохраняем полученное изображение
			objImageFile.SaveFile objFSO.BuildPath(strPath2Save, FormatLocalDateTime() & ".jpg")
			
			WScript.Echo "Complete."
			
			Set objDevice = Nothing
		Else
			WScript.Echo "Cancel scanning by user"
		End If
	Else
		WScript.Echo "No connected devices"
	End If
	
	Set objDeviceManager = Nothing
	Set objDeviceInfos   = Nothing
Else
	WScript.Echo "Папка для сохранения результатов сканирования [" & strPath2Save & "] не найдена."
	WScript.Quit 1
End If

Set objFSO = Nothing

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

'=============================================================================
Function FormatLocalDateTime()
	Dim objSWbemObjectEx
	
	For Each objSWbemObjectEx In GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2").ExecQuery("SELECT LocalDateTime FROM Win32_OperatingSystem")
		FormatLocalDateTime = Left(objSWbemObjectEx.LocalDateTime, 8) & "_" & Mid(objSWbemObjectEx.LocalDateTime, 9, 6)
		
		Exit For
	Next
End Function
'=============================================================================
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:06, 01-04-2014 | #6


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


Скрипт рабочий. Спасибо, выручили!

Отправлено: 06:50, 03-03-2021 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Сканирование документов с помощью скрипта

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
VBS/WSH/JS - как воспроизвести звук с помощью скрипта в Windows 7 Melkii Скриптовые языки администрирования Windows 3 14-08-2012 10:01
2010 - [решено] Сканирование документов в Office 2010 brudershaft Microsoft Office (Word, Excel, Outlook и т.д.) 3 22-10-2010 08:57
2008 - нужно реализовать запуск скрипта с помощью GPO vinaction Windows Server 2008/2008 R2 2 14-04-2010 20:17
2003/XP/2000 - Сканирование документов Svarslik Microsoft Office (Word, Excel, Outlook и т.д.) 4 17-03-2010 22:30
Suse/OpenSuSE - изменение mac адреса, с помощью скрипта. seman Общий по Linux 7 29-06-2009 19:13




 
Переход