powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
6 сообщений из 6, страница 1 из 1
Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
    #37846755
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем.
Имею скрипт
Код: vbnet
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.
set fso = wscript.createobject("Scripting.filesystemobject")
Set ts = fso.OpenTextFile("xml.log", 8,1)
ts.writeline (cstr(date()) + " " +cstr(time()) + " Opening...")
call lookfolder ("Z:\NEWS_FILES")
if size> 1024*1024 then 
	sizem = cstr(size/(1024*1024)) + "M"
else
	if size > 1024 then
		sizem = cstr(size/1024) + "K"
	else
		sizem = cstr(size)
	end if
end if
ts.writeline ("Quantity: " + cstr(quantity) + ", size " + sizem)
ts.writeline (cstr(date()) + " " +cstr(time()) + " Closing...")
msgbox "Done"

function lookfolder (infolder)
Set Folders = fso.GetFolder(infolder).subFolders
Set Files = fso.GetFolder(infolder).Files
for each file in files
	Name = FSO.GetBaseName(file)
	Path = fso.GetParentFolderName(file)
	Ext = fso.GetExtensionName(file)
	fullfilename = cstr(path) + "\" + cstr(name) + "." + cstr(ext) + "... "
	ts.writeline (fullfilename)
	quantity = quantity +1
next

for each folder in folders
	lookfolder(folder)
next
end function



В определенный момент выдается ошибка о неправильном использовании процедуры, указывает на
Код: vbnet
1.
ts.writeline (fullfilename)



Попытка вставки в тело цикла обработки ошибок ничего не дает.

С чем такое может быть связано?
...
Рейтинг: 0 / 0
Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
    #37847319
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fundddВ определенный момент выдается ошибка о неправильном использовании процедуры
Это и правда определённый момент? т.е. проблема воспроизводимая, а не плавающая?

Какой уровень вложенности рекурсии в момент возникновения проблемы? каково содержимое fullfilename?
Почему не определены переменные? что будет, если в процедуру передавать также и ссылку ts? а если определить ts как public?
...
Рейтинг: 0 / 0
Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
    #37847422
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
funddd,
забейте на рекурсию...
Код: vbnet
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.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
' ==============================================
' скрипт showfiles.vbs
' отображение файлов в каталоге и его подкаталогах
' с подсчетом кол-ва и суммарного размера файлоф
' ==============================================
option explicit

' папка
const S_PATH = "D:\PROGRAM_FILES\lazarus\"

' файл журнала
const S_LOG = "d:\tmplog.log" 		' ограничение - путь без пробелов
'const S_LOG = """d:\tmp2 log.log""" 	' путь содержит пробелы - экранировать кавычками

'фильтр команды find
const S_FIND = "файлов"      ' для русскоязычной Windows
'const S_FIND = "files"      ' для аглицкой Windows

' паттерн поиска в выводе команды dir|find для определения кол-ва и суммарного размера файлов
'const S_SIZE_PATTERN = "(.+) файлов (.+) байт" 	' для локализованной РУССКОЙ Windows
const S_SIZE_PATTERN = "([ 0-9]+)\D+(.+[0-9])"		' для любой(?) локализации...

dim shell,wshexec,instream,outstream,str
dim re,cm
dim quantity,sizeem

dim s_cmd_size,s_cmd_files, s_cmd


'### debug only
dim t: t = timer: wscript.echo "start: "& time()


s_cmd_files ="@for /f ""tokens =*"" %a in ('dir /s/b/a-d """& S_PATH &"""') do @echo.%a...>>"& S_LOG
' если не надо '...' после имени файла, то можно проще (оно и быстрее будет):
's_cmd_files ="dir /s/b/a-d """& S_PATH &""">>"& S_LOG

s_cmd_size = "dir /s/a-d """& S_PATH &"""|find "" "& S_FIND &"""&&exit"

set shell = createobject("wscript.shell")

s_cmd = "cmd /k @echo off&&chcp 1251&&echo."& cstr(date()) &" "& cstr(time()) &" Opening...>>"& S_LOG
set wshexec = shell.exec(s_cmd)

set instream = wshexec.stdin
instream.writeline s_cmd_files
instream.writeline s_cmd_size
set instream = nothing

set outstream = wshexec.stdout
str = vbnullstring
do until outstream.atendofstream
  str = trim(outstream.readline())
loop

set outstream = nothing
set wshexec = nothing

set re = createobject("vbscript.regexp")
re.pattern = S_SIZE_PATTERN
set cm = re.execute(str)

if cm.count<1 then
  str = "Quantity: 0, size 0 B"
else
  quantity = fix(cm(0).submatches(0))
  sizeem = fix(cm(0).submatches(1))

  if sizeem<1024 then
    str = sizeem & " B"
  elseif sizeem<1024*1024 then
    str = round(sizeem/1024,3) & " KB"
  else
    str = round((sizeem/1024)/1024,3) & " MB"
  end if
  
  str = "Quantity: "& quantity &", size: "& str
end if

set cm = nothing
set re = nothing

s_cmd = "cmd /c @echo off&&chcp 1251&&("& "echo."& str &">>"& S_LOG &")"
s_cmd = s_cmd &"&&("& "echo."& cstr(date()) &" "& cstr(time()) &" Closing...>>"& S_LOG &")"
set wshexec = shell.exec(s_cmd)


'### debug only
wscript.echo "end:   "& time(): wscript.echo "timer: "& fix(timer() - t)


wscript.quit

...
Рейтинг: 0 / 0
Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
    #37847550
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема воспроизводимая. Есть ощущение, что спотыкается о конкретный файл, о какой - не могу понять, так как обработка ошибки не дает ничего.

Уровень вложенности не проверял (а какой может быть критичным?), думаю 2-3
Переменные не определены из-за лени (зато честно)
Насчет ссылки на ts надо попробовать :)

Скукотища - это для меня какое-то очень уж сильное колдунство - посмотрел листинг и ничего не понял. Спасибо за вариант, буду пытаться читать и понимать.
...
Рейтинг: 0 / 0
Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
    #37847623
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> funddd,
> Проблема воспроизводимая. Есть ощущение, что спотыкается о конкретный файл, о какой - не могу понять, так как обработка ошибки не дает ничего.
Без обработки ошибок:
добавляете в скрипт одну строку
Код: vbnet
1.
2.
3.
4.
5.
	Ext = fso.GetExtensionName(file)
	fullfilename = cstr(path) + "\" + cstr(name) + "." + cstr(ext) + "... "
	WScript.Echo fullfilename
	ts.writeline (fullfilename)
	quantity = quantity +1



Запускаете из окна командного процессора командой
Код: vbnet
1.
cscript /nologo полный_путь_к_вашему_скрипту.vbs



При "вылете" скрипта на ts.writeline (fullfilename)
в консоли останется имя файла-"виновника".
...
Рейтинг: 0 / 0
Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
    #37847672
Фотография funddd
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Крайний совет помог моментально, без проверки всего остального.
Причина - невозможность записать символы казахского языка в файл лога
Решение -
Код: vbnet
1.
Set ts = fso.OpenTextFile("xml.log", 8,1,-1)
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Ограничение размера коллекции в VBS? Перебор коллекции files объекта FSO?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]