1

Тема: VBS: архивирование файла после его создания

Есть папка- например с:\data, в ней сторонним приложением   создаются файлы «nameaplication_yyyymmdd_hhmmss_mls.log»,
по достижению файлом размера 100мб создается след.файл и т.д.
Необходимо сделать архивирование файла сразу после того как приложение закончит работу с этим файлом , и перенос созданного архива по сети.Буду рад получить хоть какую-то информацию

2

Re: VBS: архивирование файла после его создания

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

Set WshShell = CreateObject("WScript.Shell")
WshShell.Run "prog.exe",0,True
'Скрипт продолжится после завершения работы приложения

тогда всё довольно просто. Если же приложение запускается без вашего ведома (не вашим скриптом или программой), то следить за окончанием его работы можно через WMI. Т.е проверяя список процессов.

Архивирование можно организовать через средства Windows XP

пример: http://forum.script-coding.com/viewtopic.php?id=296

либо через консольный вариант winrar. Список его команд можно посмотреть в консоли

пример: http://forum.script-coding.com/viewtopic.php?id=5338

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

3

Re: VBS: архивирование файла после его создания

Я наверно не совсем понятно объяснил -
приложение работает постоянно, т.е процесс постоянно висит.
Приложение создает файл nameaplication_yyyymmdd_hhmmss_mls.log,пишет в него логи и по достижению этим файлом 100мб закрывает его и создает следующий,плюс к этому приложение ротирует эти  файлы, но  время в течении которого файл не затрется- меньше суток,
т.е сделать архивацию по расписанию(например раз в сутки ) нельзя. Хотелось бы чтобы скрипт мониторил создание , последующее окончание работы приложения с файлом и архивировал его. Неизвестность имени создаваемого файла как я понимаю не позволяет решить задачу с помощью bat, а дальше этой технологии  мои познания написания скриптов =0. Если можете подскажите по пунктам
- vbs позволяет мониторить появление файла ?
- при этом если имя файла неизвестно?
- можно ли проверить что файл не используется(не по имени процесса), например переименованием(в тоже время заранее неизвесно имя файла)

4

Re: VBS: архивирование файла после его создания

Один из вариантов
VBScript: слежение за созданием файлов в указанном каталоге

Передумал переделывать мир. Пашет и так, ну и ладно. Сделаю лучше свой !

5 (изменено: BeS Yara, 2011-03-25 09:30:24)

Re: VBS: архивирование файла после его создания

Если логи пишутся в папку, и больше никто в эту папку не пишет, то в упомянутом Xameleon-ом примере написано как отслеживать появление нового файла в папке. При появлении нового файла остаётся найти в папке файл размером более 95Мб(например - ведь лог до 100Мб пишется?). Дополнительно можно проверить время последнего изменения этого файла(ведь перед созданием нового лог-файла в старый что-то писалось) - DateLastModified. Вот и имя файла есть.

Проверить не занят ли файл можно, как Вы и предложили, переименованем(в самого себя ):

Function IsFileLocked(f_path, f_file) ' проверка не занят ли файл другой программой
 Dim f_fso, f_f
 Set f_fso = CreateObject("Scripting.FileSystemObject")
 Set f_f = f_fso.GetFile(f_fso.BuildPath(f_path, f_file))
 wscript.echo f_f.path
 on error resume next
 err.Clear
 f_f.Move f_fso.BuildPath(f_path, f_file)
 wscript.echo err.Number
 wscript.echo err.Description
 ' 70 - разрешение отклонено
 ' 0 - выполнено успешно
 if err.Number = 0 then
   IsFileLocked = false
  else
   IsFileLocked = true
 end if
 err.Clear
 on error goto 0
 Set f_fso = Nothing
 Set f_f = Nothing
end function