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

magnum888 31-03-2014 13:10 2330923

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

читать дальше »
Код:

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


Iska 31-03-2014 18:25 2331059

Цитата:

Цитата 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
'=============================================================================


magnum888 01-04-2014 08:52 2331327

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

Iska 01-04-2014 09:00 2331329

В таком виде: «ScanImage_20140401_084424.jpg» — устроит?
Цитата:

Цитата magnum888
и если можно, оставить только время. »

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

magnum888 01-04-2014 09:38 2331337

Цитата:

Цитата Iska
В таком виде: «ScanImage_20140401_084424.jpg» — устроит? »

Дату хотелось бы убрать за ненадобностью, лишняя информация, а разделители нужны, чтобы можно было легко разобрать время когда было совершенно сканирование. В названии я убрал "ScanImage" осталась дата и время.

Iska 01-04-2014 14:06 2331469

Цитата:

Цитата 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
'=============================================================================


Hitch 03-03-2021 06:50 2951628

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


Время: 01:02.

Время: 01:02.
© OSzone.net 2001-