С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBScript/JScript/WSH/WMI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/30: Рейтинг темы: голосов - 30, средняя оценка - 4.73
2 / 2 / 0
Регистрация: 10.03.2015
Сообщений: 128
VBS

Определение файла в папке, его печать и удаление и зацикливание

13.05.2015, 16:35. Показов 6314. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот мой скрипт

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
'On Error Resume Next
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "C:\Users\SergeiSorokin\Desktop\test\"
'Основной цикл
While true
 Set lFolder = gFSO.GetFolder(gWatchFolder)
 Set lFiles = lFolder.Files
 For Each lFile In lFiles
  PrintFile(gWatchFolder & lFile.Name)
 Next
 WScript.Sleep(1)
WEnd
 
'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
 'Ждем некоторе время (пока файл до конца запишется) 
 WScript.Sleep(3)
 'msgbox(pFileName)
 'Мы (больше) не боимся пробелов :Р
 Dim objFS, objShell, objFolderItems
Dim strMask, arrFolders, strArguments, strVerb, intShowMode, strTemp, i, j
 
strMask = "*.pdf": strArguments = "": strVerb = "print": intShowMode = 0
arrFolders = Array("C:\Users\SergeiSorokin\Desktop\test")
Set objShell = CreateObject("Shell.Application")
If objShell.NameSpace(&h4).Items.Count > 1 Then
    Set objFS = CreateObject("Scripting.FileSystemObject")
    For i = 0 To UBound(arrFolders)
        If objFS.FolderExists(arrFolders(i)) Then
            Set objFolderItems = objShell.NameSpace(arrFolders(i)).Items
            objFolderItems.Filter 64 + 128, strMask
            On Error Resume Next
            For j = 0 To objFolderItems.Count - 1
                strTemp = objFolderItems.Item(j).Name
                objShell.ShellExecute strTemp, strArguments, arrFolders(i), strVerb, intShowMode
                If Err.Number = 0 Then
                    WScript.Echo "Задание печати файла " & strTemp & " обработано успешно."
                Else
                    WScript.Echo "Ошибка " & Err.Number & " при печати файла " & strTemp & vbNewLine & Err.Description
                    Err.Clear
                End If
            Next
            On Error GoTo 0
        Else
            WScript.Echo "Не найден путь " & arrFolders(i)
        End If
    Next
    Set objFolderItems = Nothing: Set objFS = Nothing
Else
    WScript.Echo "Не найдено ни одного подключения к принтеру."
End If
Set objShell = Nothing
WScript.Quit 0
gFSO.DeleteFile(pFileName)
 If gFSO.FileExists(pFileName) Then
  'Мало ли чего может случиться, лучше пусть у Иван Иваныча перестанет печатать, чем один файл много раз уйдет на принтер
  'msgbox("Не удалось удалить файл " & pFileName & "! Позвоните Василию по т. 123-456)
  WScript.Quit
 'Else
  'Пока не реализовано
  'ToLog("Файл " & lFileName & " удален.")
 End If
End sub
Что происходит: при попадании файла в папку печать идет, файл не удаляется. При последующих добавлениях файла в папку ничего не происходит.

Помогите, пожалуйста.

Добавлено через 1 час 17 минут
Всё, сделал, только осталось подправить интервалы времени, чтобы работало без ошибок.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "C:\Users\SergeiSorokin\Desktop\test\"
'Основной цикл
While true
 Set lFolder = gFSO.GetFolder(gWatchFolder)
 Set lFiles = lFolder.Files
 For Each lFile In lFiles
  PrintFile(gWatchFolder & lFile.Name)
 Next
 WScript.Sleep(1)
WEnd
 
'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
 'Ждем некоторе время (пока файл до конца запишется) 
 WScript.Sleep(3)
 'msgbox(pFileName)
 'Мы (больше) не боимся пробелов :Р
 
 Dim objFS, objShell, objFolderItems
Dim strMask, arrFolders, strArguments, strVerb, intShowMode, strTemp, i, j
 
strMask = "*.pdf": strArguments = "": strVerb = "print": intShowMode = 0
arrFolders = Array("C:\Users\SergeiSorokin\Desktop\test")
Set objShell = CreateObject("Shell.Application")
If objShell.NameSpace(&h4).Items.Count > 1 Then
    Set objFS = CreateObject("Scripting.FileSystemObject")
    For i = 0 To UBound(arrFolders)
        If objFS.FolderExists(arrFolders(i)) Then
            Set objFolderItems = objShell.NameSpace(arrFolders(i)).Items
            objFolderItems.Filter 64 + 128, strMask
            On Error Resume Next
            For j = 0 To objFolderItems.Count - 1
                strTemp = objFolderItems.Item(j).Name
                objShell.ShellExecute strTemp, strArguments, arrFolders(i), strVerb, intShowMode
                If Err.Number = 0 Then
                    WScript.Echo "Задание печати файла " & strTemp & " обработано успешно."
                Else
                    WScript.Echo "Ошибка " & Err.Number & " при печати файла " & strTemp & vbNewLine & Err.Description
                    Err.Clear
                End If
            Next
            On Error GoTo 0
        Else
            WScript.Echo "Не найден путь " & arrFolders(i)
        End If
    Next
    Set objFolderItems = Nothing: Set objFS = Nothing
Else
    WScript.Echo "Не найдено ни одного подключения к принтеру."
End If
Set objShell = Nothing
 
 gFSO.DeleteFile(pFileName)
End sub
С интервалами кто может помочь?
Получается, что если в процессе ничего быстро не нажимать то все работает. А если в выскочившем окне быстро нажать "ок", то весь процесс сбивается.

Освещая проблему - настраиваю сетевой принтер, драйверов нормальных не нашлось. Установил PDF принтер.
Теперь настраиваю автоматическую печать с папки. Теперь надо чтобы любой человек не задумывался над тем как это работает, просто печатал.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.05.2015, 16:35
Ответы с готовыми решениями:

Мониторинг появления файлов в заданной папке, их печать и удаление
Задача такая: Если в папке какой-то файл есть, должен этот файл печататься и потом удалятся. Для Word это получается. А как это делать для...

Определение наличия файла в папке
Доброе утро, уважаемые форумчане. Возникла такая проблема: Необходимо периодически из excel-файла вытаскивать данные в базу для...

Удаление файла в папке по имени
Здравствуйте! Помогите пожалуйста. Нужно удалить файл из папки. Имя файла формируется по дате и имеет формат - ДДММГГ_0.txt. Так вот...

5
2619 / 549 / 109
Регистрация: 21.03.2012
Сообщений: 1,051
13.05.2015, 17:39
Futures, рациональная процедура наблюдения за появлением файла в папке организуется с помощью создания подписки на соответствующее системное событие.
Пример похожего сценария можно увидеть здесь: VBS Печать JPEG-изображений.
Реализацию собственно процедуры печати лучше оставить ту, что в вашей заготовке (с помощью метода ShellExecute объекта Shell.Application).
0
2 / 2 / 0
Регистрация: 10.03.2015
Сообщений: 128
14.05.2015, 14:46  [ТС]
Спасибо большое.

Сделал следующим образом:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "C:\Users\SergeiSorokin\Desktop\test\"
'Основной цикл
While true
 Set lFolder = gFSO.GetFolder(gWatchFolder)
 Set lFiles = lFolder.Files
 For Each lFile In lFiles
  PrintFile(gWatchFolder & lFile.Name)
 Next
 WScript.Sleep(1)
WEnd
 
'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
 'Ждем некоторе время (пока файл до конца запишется) 
 WScript.Sleep(3)
 'msgbox(pFileName)
 'Мы (больше) не боимся пробелов :Р
 
 Dim objFS, objShell, objFolderItems
Dim strMask, arrFolders, strArguments, strVerb, intShowMode, strTemp, i, j
 
strMask = "*.pdf": strArguments = "": strVerb = "print": intShowMode = 0
arrFolders = Array("C:\Users\SergeiSorokin\Desktop\test")
Set objShell = CreateObject("Shell.Application")
If objShell.NameSpace(&h4).Items.Count > 1 Then
    Set objFS = CreateObject("Scripting.FileSystemObject")
    For i = 0 To UBound(arrFolders)
        If objFS.FolderExists(arrFolders(i)) Then
            Set objFolderItems = objShell.NameSpace(arrFolders(i)).Items
            objFolderItems.Filter 64 + 128, strMask
            On Error Resume Next
            For j = 0 To objFolderItems.Count - 1
                strTemp = objFolderItems.Item(j).Name
                objShell.ShellExecute strTemp, strArguments, arrFolders(i), strVerb, intShowMode
                If Err.Number = 0 Then
                    WScript.Echo "Задание печати файла " & strTemp & " обработано успешно."
                Else
                    WScript.Echo "Ошибка " & Err.Number & " при печати файла " & strTemp & vbNewLine & Err.Description
                    Err.Clear
                End If
            Next
            On Error GoTo 0
        Else
            WScript.Echo "Не найден путь " & arrFolders(i)
        End If
    Next
    Set objFolderItems = Nothing: Set objFS = Nothing
Else
    WScript.Echo "Не найдено ни одного подключения к принтеру."
End If
Set objShell = Nothing
 WScript.Sleep(10000)
 gFSO.DeleteFile(pFileName)
End sub
оказалось проблема была в том, что стояла маленькая задержка WScript.Sleep. значения даются в миллисекундах, я ставил 3, 10, тестировал - не выходило. файл удалялся раньше чем печатался. потом дошло, что надо попробовать больше. поставил 10000 получилось.
1
0 / 0 / 0
Регистрация: 04.04.2018
Сообщений: 14
04.04.2018, 19:41
пишет, что не найден файл ИмяФайлаДляПечати и не печатает, а файл имеет расширение и путь:
E:\ИмяФайлаДляПечати.pdf

и что-то не так с кодировкой - иероглифы
Задача: в линуксе печатаем в PDF в определённую папку, а в виртуальной машине Windows 7 32х с подключённым принтером.
Что не так делаю?

путь к папке указал

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "E:\"
'Основной цикл
While true
 Set lFolder = gFSO.GetFolder(gWatchFolder)
 Set lFiles = lFolder.Files
 For Each lFile In lFiles
  PrintFile(gWatchFolder & lFile.Name)
 Next
 WScript.Sleep(1)
WEnd
 
'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
 'Ждем некоторе время (пока файл до конца запишется) 
 WScript.Sleep(3)
 'msgbox(pFileName)
 'Мы (больше) не боимся пробелов :Р
 
 Dim objFS, objShell, objFolderItems
Dim strMask, arrFolders, strArguments, strVerb, intShowMode, strTemp, i, j
 
strMask = "*.pdf": strArguments = "": strVerb = "print": intShowMode = 0
arrFolders = Array("E:\")
Set objShell = CreateObject("Shell.Application")
If objShell.NameSpace(&h4).Items.Count > 1 Then
    Set objFS = CreateObject("Scripting.FileSystemObject")
    For i = 0 To UBound(arrFolders)
        If objFS.FolderExists(arrFolders(i)) Then
            Set objFolderItems = objShell.NameSpace(arrFolders(i)).Items
            objFolderItems.Filter 64 + 128, strMask
            On Error Resume Next
            For j = 0 To objFolderItems.Count - 1
                strTemp = objFolderItems.Item(j).Name
                objShell.ShellExecute strTemp, strArguments, arrFolders(i), strVerb, intShowMode
                If Err.Number = 0 Then
                    WScript.Echo "Задание печати файла " & strTemp & " обработано успешно."
                Else
                    WScript.Echo "Ошибка " & Err.Number & " при печати файла " & strTemp & vbNewLine & Err.Description
                    Err.Clear
                End If
            Next
            On Error GoTo 0
        Else
            WScript.Echo "Не найден путь " & arrFolders(i)
        End If
    Next
    Set objFolderItems = Nothing: Set objFS = Nothing
Else
    WScript.Echo "Не найдено ни одного подключения к принтеру."
End If
Set objShell = Nothing
 WScript.Sleep(10000)
 gFSO.DeleteFile(pFileName)
End sub
0
6968 / 2862 / 1100
Регистрация: 06.06.2017
Сообщений: 9,708
04.04.2018, 19:59
SvoiLudi, 38 строка:
Visual Basic
1
                strTemp = objFS.GetFileName((objFolderItems.Item(j).Path)
P.S.: Скрипт, конечно, кривенько написан.
0
0 / 0 / 0
Регистрация: 04.04.2018
Сообщений: 14
04.04.2018, 21:03
спасибо, у меня тоже заработало

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
'pinter_PDF.vbs
'Автоматическая печать PDF-файлов, появляющихся в определенной папке
'Установите программу SumatraPDF http://www.softportal.com/software-7568-sumatra-pdf.html
'Глобальные переменные
Set gFSO = CreateObject("Scripting.FileSystemObject")
Set gShell = CreateObject("WScript.Shell")
'Папка, в которой скрипт ждет PDF-файлы (к этой папке (папкам) д.б. дан доступ по сети)
gWatchFolder = "E:\"
'Основной цикл
While true
 Set lFolder = gFSO.GetFolder(gWatchFolder)
 Set lFiles = lFolder.Files
 WScript.Sleep(10000)
 For Each lFile In lFiles 
' msgbox(gWatchFolder) 
 'msgbox(lFile.Name)
  PrintFile(gWatchFolder & lFile.Name)
 Next
 
WEnd
 
'Функция печати конкретного pdf-файла
Sub PrintFile(pFileName)
 'Ждем некоторе время (пока файл до конца запишется) 
 WScript.Sleep(10)
 'msgbox(pFileName)
 'Укажите путь к программе SumatraPDF
 s = """C:\Program Files\SumatraPDF\SumatraPDF.exe""  -exit-on-print -print-to-default   """ & pFileName & """"
 'msgbox (s)
 Call gShell.Run(s,0,true)
 'msgbox(pFileName)
 WScript.Sleep(10)
 gFSO.DeleteFile(pFileName)
 If gFSO.FileExists(pFileName) Then
  'Мало ли чего может случиться, лучше пусть у Иван Иваныча перестанет печатать, чем один файл много раз уйдет на принтер
  msgbox("Не удалось удалить файл " & pFileName & "! Позвоните компьютерщику")
  WScript.Quit
 'Else
  'Пока не реализовано
  'ToLog("Файл " & lFileName & " удален.")
 End If
End sub
 
'Доделывал чужое под себя +7 902 44 00 00 6 Компьютерщик www.2133790.Ru
'брал исходник здесь https://habrahabr.ru/post/112404/ и спасибо автору за ответы на мои вопросы
'отсюда http://autoit-script.ru/index.php?topic=21264.0
'и отсюда https://www.cyberforum.ru/vbscript-wsh/thread1445205.html
Добавлено через 5 минут
https://www.print-driver.ru/st... -line-tool
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.04.2018, 21:03
Помогаю со студенческими работами здесь

Сравнение файлов в папке и удаление файла
Всем привет! Что требуется? Есть папка в которую каждые 3 часа батник закидывает файлы, файлы в формате "log_%data%.txt", нужно...

Склеивание имени файла и пути к его папке
Всем привет. Где-то видел название стандартного метода, который принимает два параметра - путь к папке и имя файла, - склеивает их и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru