Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 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

Открыть новую тему     Написать ответ в эту тему

ShIvADeSt



Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопросы, задачи и их решения по VBScript.

 
Мануал (english, 600 Кб). | Зеркало
MS Scripting 5.6 (700 КБ), включает последнюю версию VBS. Владельцам XP/2000(?) должен быть не нужен. | Зеркало
Немного на wikiпедии.
Предыдущие части: 1
 
Смежные темы:
Сценарии Windows
Командная строка, батники\сценарии (bat, cmd)
Скрипты KiXtart

Всего записей: 3956 | Зарегистр. 29-07-2003 | Отправлено: 04:12 12-07-2011 | Исправлено: Smitis, 23:28 26-02-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Сейчас подумалось: в плане производительности не было бы эффективней и проще считать не ссылки — а время с момента создания активного файла? Чтобы запоминалось время, когда текущий наполняемый файл был создан — и если с момента его создания прошло больше трёх часов — создавался бы новый файл? Подошёл бы и такой формат.

Всего записей: 1477 | Зарегистр. 05-04-2010 | Отправлено: 09:16 05-04-2018
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
нифига не понял - что вы качаете и зачем? просто выкачиваете страницы? или файлы? а зачем сливать их в один файл?

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 10:44 05-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa
Да, качаю страницы HTML с помощью WGET. Сливаю в один файл, потому что для некоторых задач это более удобно: к примеру, скачать 100 тысяч файлов с мусором на страницах, а потом извлечь из них с PowerGrep только нужные фрагменты, формируя файлы на лету и т.п.

Всего записей: 1477 | Зарегистр. 05-04-2010 | Отправлено: 10:56 05-04-2018 | Исправлено: D1D1D1D, 10:57 05-04-2018
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D
так и думал: ИМХО вы выбрали не тот инструмент, создав себе головную боль.  
я бы для такой задачи взял HTTrack website copier - можно очень тонко настроить что качать и что не качать (по типам файлов), "глубину" погружения по ссылкам на страницах, авторизацию (если нужна), не качает "перекрёстки" - т.е. если какой-то ресурс (например - картинка) уже скачан для одной страницы сайта, то для остальных он не будет перекачиваться заново. так же - если уже что-то удалили руками - тоже не перекачивает. умеет синхронизировать скачанное с обновлениями на сайте. продолжение прерванной закачки и ещё много-много всякого всего.
изначально управление через командную строку, но есть и GUI от автора - практически полный.
ваш скрипт не контролирует что качает: vbs получает "поток" от wget и тупо его сохраняет. какой критерий ограничений не выберете - будет рвать файлы. единственный вариант - ручной - т.е. вы "накидываете" ссылок на заведомо меньший размер, чем лимит. но тогда вам и vbs не особо нужен - разве что, чтобы склеить всё в кучу.

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 13:00 05-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa
 
Почему это в некоторых случаях не головная боль, а удобство — я уже пояснил. Для остального есть ещё более удобный (нежели HTTrack) MetaProducts Offline Explorer.
 
Добавлено:
Критерий по дате создания файла сработал бы, потому что проверка производилась бы перед или после скачивания файла.

Всего записей: 1477 | Зарегистр. 05-04-2010 | Отправлено: 13:29 05-04-2018 | Исправлено: D1D1D1D, 13:34 05-04-2018
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
есть ещё более удобный (нежели HTTrack) MetaProducts Offline Explorer.

возможно - вам видней, правда он слегка платный, в отличии от ))

Цитата:
Критерий по дате создания файла сработал бы...

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

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 17:43 05-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa

Цитата:
знать, в какой момент времени закончится закачка одного линка и начнётся следующий?  

Получается, тогда проверка по времени отпадает и остаётся вариант с подсчётом ссылок. А с ним мне на stackoverflow подсказали код — только его так и не удалось задействовать. Может взглянет кто, потому что в таком виде не работает:

Код:
 
Const ReferencesCount = 1000000 ' ссылок на файл '
Dim Buffer ' буфер приёма и парсинга ссылок '
Dim NextRef ' буфер под выделение ссылки '
Dim RefCount ' количество ссылок, записанных в файл '
Dim FSO,stdin,Count,CurrFile ' переменные из исходного кода '
 
Set FSO = CreateObject("Scripting.FileSystemObject")  
Set stdin = FSO.GetStandardStream(0)  
Count = 0  
Set CurrFile = FSO.CreateTextFile("lst" & CStr(Year(Date())) & "-" & Right("0" & CStr(Month(Date())), 2) & "-" & Right("0" & CStr(Day(Date())), 2) & "_" & Replace(Time,":","-") & Count & ".htm",1)  
Do Until stdin.AtEndOfStream  
    Buffer = Buffer & stdin.Read(1024)
    NextRef = ExtractRef(Buffer)
    Do Until NextRef = ""
        CurrFile.Write NextRef & vbNewLine ' по одной ссылке на строку '
        RefCount = RefCount + 1
        If RefCount>= ReferencesCount Then
            CurrFile.Close
            Count = Count + 1
            Set CurrFile = FSO.CreateTextFile("lst" & CStr(Year(Date())) & "-" & Right("0" & CStr(Month(Date())), 2) & "-" & Right("0" & CStr(Day(Date())), 2) & "_" & Replace(Time,":","-") & Count & ".htm",1)  
            RefCount = 0
        End If
        NextRef = ExtractRef(Buffer)
    Loop
Loop  
CurrFile.Close
 
Function ExtractRef(ByRef Buffer)
Dim Border ' Граница первой ссылки в буфере '
 
Buffer = Trim(Buffer)
Border = Instr(Buffer, " ") ' если разделитель ссылок - пробел '
If Border = 0 Then  
    ExtractRef = ""
Else
    ExtractRef = Trim(Left(Buffer, Border))
    Buffer = Mid(Buffer, Border)
End If
End Function


Всего записей: 1477 | Зарегистр. 05-04-2010 | Отправлено: 19:11 05-04-2018 | Исправлено: D1D1D1D, 19:14 05-04-2018
Proshaa

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
D1D1D1D

Цитата:
так и не удалось задействовать

в коде ограничение - миллион ссылок. поставьте (для тестов), скажем, 5 и проверяйте.

Код:
Const ReferencesCount = 5 ' ссылок на файл '  

Всего записей: 3079 | Зарегистр. 10-01-2011 | Отправлено: 20:23 05-04-2018
D1D1D1D

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Proshaa
 
Пробовал, не идёт.

Всего записей: 1477 | Зарегистр. 05-04-2010 | Отправлено: 20:55 05-04-2018
VidelSamogO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Есть скрипт чистки папки кэша.

Код:
DelFolderCache2entries.vbs [line 1] :
Код:
Set FileSys = CreateObject("Scripting.FileSystemObject")
Set
objSourceFolder = FileSys.GetFolder("j:\UTL\111\km76-goanna341-bin\Profiles\ikbhletk.default\cache2")
FileSys.DeleteFolder objSourceFolder
WScript.Sleep 60000*0.03
set fso = createobject ("scripting.filesystemobject")
fso.createfolder "j:\UTL\111\km76-goanna341-bin\Profiles\ikbhletk.default\cache2"
fso.createfolder "j:\UTL\111\km76-goanna341-bin\Profiles\ikbhletk.default\cache2\entries"
fso.createfolder "j:\UTL\111\km76-goanna341-bin\Profiles\ikbhletk.default\cache2\doomed"
 
 ?
Нужно чтобы он работал относительно места расположения скрипта. Для портабельности.

Всего записей: 765 | Зарегистр. 16-08-2008 | Отправлено: 17:05 13-04-2018 | Исправлено: VidelSamogO, 17:14 13-04-2018
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.GetFile(Wscript.ScriptFullName)
Wscript.Echo  FSO.GetParentFolderName(F) + "\"

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 17:32 13-04-2018
VidelSamogO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151
Этот скрипт я знаю. Как мне его вставить в свой, чтобы работало при запуске из папки "km76-goanna341-bin"?

Всего записей: 765 | Зарегистр. 16-08-2008 | Отправлено: 19:08 13-04-2018 | Исправлено: VidelSamogO, 19:15 13-04-2018
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
FSO.GetParentFolderName(F) + "\"

папка в которой находится ваш скрипт

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 19:16 13-04-2018
VidelSamogO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
a929151

Цитата:
папка в которой находится ваш скрипт
Это понятно. Но что писать вместо полных путей, если я перемещу браузер в другое место?  
 

Всего записей: 765 | Зарегистр. 16-08-2008 | Отправлено: 19:18 13-04-2018 | Исправлено: VidelSamogO, 19:29 13-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
примерно так. FF нет проверить не могу.

Код:
dim dir
Set FileSys = CreateObject("Scripting.FileSystemObject")  
Set F = FileSys.GetFile(Wscript.ScriptFullName)  
dir = FileSys.GetParentFolderName(F)
Set objSourceFolder = FileSys.GetFolder(dir & "\Profiles\ikbhletk.default\cache2")  
FileSys.DeleteFolder objSourceFolder  
WScript.Sleep 60000*0.03  
FileSys.createfolder dir & "\Profiles\ikbhletk.default\cache2"  
FileSys.createfolder dir & "\Profiles\ikbhletk.default\cache2\entries"  
FileSys.createfolder dir & "\Profiles\ikbhletk.default\cache2\doomed"  

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 19:25 13-04-2018
a929151



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
FSO.GetParentFolderName(F) + "\" + "относительный путь к папке ..\cache2"

Всего записей: 1362 | Зарегистр. 30-03-2016 | Отправлено: 19:26 13-04-2018
VidelSamogO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Благодарю за помощь. Сейчас попробую. Да, работает.
 
Вот как например я пробовал создать скрипт чистки для USD.
Не работает.
 

Код:
Set FSO = CreateObject("Scripting.FileSystemObject")
Set F = FSO.GetFile(Wscript.ScriptFullName)
pathyt = FSO.GetParentFolderName(F)
'WScript.Echo pathyt
 
Option Explicit
Dim sFolder: sFolder = pathyt  
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")
 
If oFSO.FolderExists(sFolder) Then
  DelFileOnMask sFolder, "html htm js bmP jpeg jpg gif  wav uploadbox2.txt log" ' каталог и маски файлов для удаления
  WScript.Echo "Готово."
Else
  WScript.Echo "Не найден путь " & sFolder
End If
WScript.Quit(0)
 
Function DelFileOnMask(s, sMask)
  Dim oFld, arrMask, v, i
  Set oFld = oFSO.GetFolder(s)
  arrMask = Split(LCase(sMask), " ")
  For Each v In oFld.Files
    For i = LBound(arrMask) To UBound(arrMask)
      If LCase(oFSO.GetExtensionName(s & "\" & v.Name)) = arrMask(i) Then
        v.Delete
        Exit For
      End If
    Next
  Next
End Function
 
 
Но теперь я знаю принцип. Сделаю.

Всего записей: 765 | Зарегистр. 16-08-2008 | Отправлено: 19:28 13-04-2018 | Исправлено: VidelSamogO, 19:46 13-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VidelSamogO
вы слишком грубо объединяйте разные скрипты  
в первом то же самое
Set FileSys = CreateObject("Scripting.FileSystemObject")  
если уже создали объект один раз , то его и надо использовать, а не создавать такой же, только с другим именем
set fso = createobject ("scripting.filesystemobject")  
 
в втором тоже самое, два скрипта тупо суёте в одном файле.
 
вроде так должно работать

Код:
Option Explicit  
Dim oFSO: Set oFSO = CreateObject("Scripting.FileSystemObject")  
 
Dim F: Set F = oFSO.GetFile(Wscript.ScriptFullName)  
Dim pathyt: pathyt = oFSO.GetParentFolderName(F)  
Dim sFolder: sFolder = pathyt  
' WScript.Echo sFolder  
 
If oFSO.FolderExists(sFolder) Then  
  DelFileOnMask sFolder, "html htm js bmp jpeg jpg gif wav uploadbox2.txt log" ' каталог и маски файлов для удаления  
  WScript.Echo "Готово."  
Else  
  WScript.Echo "Не найден путь " & sFolder  
End If  
WScript.Quit(0)  
   
Function DelFileOnMask(s, sMask)  
  Dim oFld, arrMask, v, i  
  Set oFld = oFSO.GetFolder(s)  
  arrMask = Split(LCase(sMask), " ")  
  For Each v In oFld.Files  
    For i = LBound(arrMask) To UBound(arrMask)  
      If LCase(oFSO.GetExtensionName(s & "\" & v.Name)) = arrMask(i) Then  
        v.Delete  
        Exit For  
      End If  
    Next  
  Next  
End Function  

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 20:01 13-04-2018
VidelSamogO



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Tilks
Благодарю. Я понимаю ошибку. Вы читаете как последовательность инструкций, а я просто пытаюсь объединить как модули, не пытаясь вдуматься. Например объявление DIM - dimension=размерность - мне пока что ничего не говорит.

Всего записей: 765 | Зарегистр. 16-08-2008 | Отправлено: 20:29 13-04-2018 | Исправлено: VidelSamogO, 20:34 13-04-2018
Tilks

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
VidelSamogO
вам почитать немножко надо про Dim и там же есть про Option Explicit
http://www.askit.ru/custom/progr_admin/m02/02_03_vbscript_variables.htm

Всего записей: 2688 | Зарегистр. 14-08-2005 | Отправлено: 20:46 13-04-2018
Открыть новую тему     Написать ответ в эту тему

Страницы: 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

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Программирование "удобняшек" на VBScript (Часть 2)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru