1 (изменено: alexii, 2012-10-03 16:51:24)

Тема: VBScript: Проверка наличия файлов в директории в выводом сообщения

'***************************************************************************************************
' Purpose   : Проверка существования файлов в папке по маске
'***************************************************************************************************
Dim FSO,FileName                                             
Set FSO = WScript.CreateObject("Scripting.FileSystemObject") 
iDir1 = "U:\"                                    
file1 = "U:\*.*"
iDir2 = "Q:\ed"
file2 = "Q:\ed\*.*"
iDir3 = "Q:\Vyp"
file3 = "Q:\Vyp\*.*"

Set Files = FSO.GetFolder(iDir1).Files
For each File1 In Files
if  FSO.FileExists(file1)  Then 
fl=fl+1
end if
next
if fl<>0 then
    MsgBox ("Пришли файлы 1!")
end if

 Set Files = FSO.GetFolder(iDir2).Files
 For each File2 In Files
 if  FSO.FileExists(file2)  Then
 fl=fl+1
 end if
 next
 if fl<>0 then
     MsgBox ("Пришел файл 2!")
 end if
 
 Set Files = FSO.GetFolder(iDir3).Files
 For each File3 In Files
 if  FSO.FileExists(file3)  Then
 fl=fl+1
 end if
 next
 if fl<>0 then
     MsgBox ("Пришел файл 3!")
 end if

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

2

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Везде Вы ошиблись. Опишите словами подробно что нужно.

3 (изменено: xsanekk, 2012-10-03 19:18:06)

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Вообщем есть три папки, нужно что бы появлялось сообщение соответствующие папке. Допустим выдает сообщение при появлении файла: пришел файл в певую папку, потом пришел файл во вторую папку и т.д...

4

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

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

5

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

File3 и file3 одна и та же переменная для VBScript, но разные для JScript. Вроде совсем недавно попадался пост с подобной задачей и такой-же ошибкой.

6

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher пишет:

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

Нет (ни вообще, ни в контексте задачи автора темы).

7

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Сомневаюсь, что в методе: FSO.FileExists(file1) можно использовать групповые символы: file1 = "U:\*.*"

8 (изменено: dab00, 2012-10-04 10:32:17)

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Я бы так сделал:


Dim fso, arr, f, fl, ret
Set fso = CreateObject("Scripting.FileSystemObject")
arr = Array("d:\111","d:\112","d:\113") 'Ваши каталоги
For Each f In arr
	If fso.FolderExists(f) Then
		For Each fl In fso.GetFolder(f).Files		
			ret = ret & "В каталог " & Chr(34) & f & Chr(34) & " пришел файл " & Chr(34) & fl.Name & Chr(34) & vbCrLf
		Next
	End If
Next
If ret <> vbNullString Then MsgBox ret

9

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

спасибо! классно! только вот надо что бы уведомлял именно каждый каталог своим отдельным сообщением... как я описывал выше...

10

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения


Dim fso, arr, f, fl, ret
Set fso = CreateObject("Scripting.FileSystemObject")
arr = Array("d:\111","d:\112","d:\113") 'Ваши каталоги
For Each f In arr
	ret = vbNullString
	If fso.FolderExists(f) Then
		For Each fl In fso.GetFolder(f).Files		
			ret = ret & "В каталог " & Chr(34) & f & Chr(34) & " пришел файл " & Chr(34) & fl.Name & Chr(34) & vbCrLf
		Next
	End If
	If ret <> vbNullString Then MsgBox ret
Next

Если файлов много, лучше сохранить информацию в файл в каталоге текущего пользователя (например в txt) и открыть каким-нибудь приложением (например notepad.exe)

11

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Вот!!! Спасибо! Так прям то что надо!

12

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

im2002 пишет:

Сомневаюсь, что в методе: FSO.FileExists(file1) можно использовать групповые символы: file1 = "U:\*.*"

Нельзя.

13

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Dmitrii пишет:

Нет (ни вообще, ни в контексте задачи автора темы).

Ни нет, а да. Есть файлов нет, то размер папки - 0 байт.

14

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher, Вы не правы. Размер папки учитывает только размер файлов, но не их количество. Даже в случае наличия огромного количества пустых файлов размер папки будет нулевым. Даже если изменится количество файлов, но их общий размер останется неизменным — размер папки будет тем же.

15

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

alexii, если только учитывать нулевые файлы, то да. Только зачем кидать такие файлы в папку?

16

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Не только:

Даже если изменится количество файлов, но их общий размер останется неизменным — размер папки будет тем же.

Был файл на сто килобайт, и стал файл на сто килобайт. Но другой.

17 (изменено: Flasher, 2012-10-04 23:17:57)

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

alexii, так речь шла про добавление файла, а не перезапись.

18

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher пишет:

Чтобы проверять папку на наличие файлов

надо  прочитать значение свойства Count:

...
Set Files = FSO.GetFolder(iDir3).Files
WScript.Echo(Files.Count)
( 2 * b ) || ! ( 2 * b )

19

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher пишет:

Был файл на сто килобайт, и стал файл на сто килобайт. Но другой.

Другой файл на те же сто килобайт. При чём тут перезапись?

Rumata пишет:

надо  прочитать значение свойства Count:

То же самое возражение.

В общем, всё упирается в то, что автор не озвучил, что происходит с файлами далее, после скрипта.

20

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

alexii
в контексте изменения количества файлов - это верное решение. В контексте модификации файла (нескольких файлов) - этого недостаточно.

( 2 * b ) || ! ( 2 * b )

21 (изменено: Dmitrii, 2012-10-06 14:14:00)

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher пишет:

если только учитывать нулевые файлы, то да. Только зачем кидать такие файлы в папку?

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

Rumata пишет:

... В контексте модификации файла (нескольких файлов) - этого недостаточно....

Этого недостаточно и в том случае, когда требуется не узнать текущее количество файлов, а получить уведомление о том, что в папке происходили изменения в их количестве. Ведь в момент очередного подсчёта может оказаться, что файлов столько же, сколько было и при предыдущем "замере", а на деле может быть, что N файлов добавили, а потом столько же удалили.

22

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

А можно ли добавить в скрипт маску файлов?

23

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

alexii пишет:

Другой файл на те же сто килобайт. При чём тут перезапись?

Какая разница, на сколько файл килобайт (кстати, байт), если это другой файл с другим именем и в сумме размер папки даст другой результат? Автор это по крайней мере должен предполагать, как и то, что записываемые файлы - не пустышки. А перезапись происходит, если имя у записываемого файла аналогичное.

Dmitrii пишет:

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

Имелось в виду не чья-то отдалённая цель, а цель ТС.

xsanekk пишет:

А можно ли добавить в скрипт маску файлов?

Можно, но не через FSO.

Извиняюсь за поздний ответ..

24

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher, автор темы нигде не сказал ни того, что файлы из наблюдаемых каталогов не могут удаляться, ни того, что новые файлы не могут быть пустыми. Отсюда однозначно следует, что способ наблюдения за папкой через проверку её размера не может быть признан полностью корректным. Тот же вывод и из этих же предпосылок можно сделать и относительно метода контроля путём подсчёта количества файлов.

Flasher пишет:

... Автор это по крайней мере должен предполагать, как и то, что записываемые файлы - не пустышки...

Это Ваши предположения, но так ли думает автор?

25 (изменено: Flasher, 2012-10-22 20:51:11)

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Dmitrii пишет:

Отсюда однозначно следует, что способ наблюдения за папкой через проверку её размера не может быть признан полностью корректным. Тот же вывод и из этих же предпосылок можно сделать и относительно метода контроля путём подсчёта количества файлов.

Вопрос не в полноте корректности, а в возможности применения (с учётом очевидных условий), которая была отвергнута.

Dmitrii пишет:

Это Ваши предположения, но так ли думает автор?

Естественно, мои. Автор уплыл.

26

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Flasher пишет:

Вопрос не в полноте корректности, а в возможности применения (с учётом очевидных условий)

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

P.S.
Думаю, что дискуссию на этом можно завершить, т.к. всё существенное уже сказано. При этом каждый остался при своём (как чаще всего и бывает в спорах).

27

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Dmitrii пишет:

с моей точки зрения, условия вовсе не так уж и очевидны

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

28

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Если автор одобрит, то можно:
- автоудаление 0-вых файлов предусмотреть
- ввести логику, где учитывается и кол-во файлов и их общий размер и были ли они изменены, а также сброс данных монитоинга в 24-00 или по истечении какого-либо периода
- ввести комбинированный учет как средствами js, так и через планировщика файлом *.bat

.. все решаемо индивидуально к.. чему так автор и не раскрыл всех идей и обстоятельств, .

Любители построили Ковчег, а профессионалы - Титаник.

29 (изменено: Dmitrii, 2012-10-24 11:10:47)

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

stir, обсуждаемую задачу можно достаточно просто решить с помощью WMI. Суть решения - подписка на соответствующее системное событие. Такие сценарии неоднократно разбирались на форуме.
Однако, судя по тому, что автор темы никак не участвует в обсуждении, его вполне устраивает уже предложенный вариант.

30

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

OFF.
Dmitrii, есть ли раздел на форуме посвященный скриптам в помощь сисадминам для КД (2000-2003-2008) с уже готовыми решениями или как всегда - инет нам в помощь, , ?
так..для расширения кругозора..

Любители построили Ковчег, а профессионалы - Титаник.

31

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

Отдельного раздела нет.

32

Re: VBScript: Проверка наличия файлов в директории в выводом сообщения

xsanekk пишет:
'***************************************************************************************************
' Purpose   : Проверка существования файлов в папке по маске
'***************************************************************************************************

[b]fl=fl+1[/b]

[b]if fl<>0 then[/b]

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

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