Ребята нашел интересный скриптик
Настраиваемый обработчик файлов *
Копирование, перемещение, удаление файлов и *
просто отслеживание наличия в лог согласно *
настроек ini файла.
[more=Сам скрипт]' *******************************************************
' * Find Delete Read Log v.1.0 *
' * 15.08.2006, Polo (C) ГИВЦ *
' * Настраиваемый обработчик файлов *
' * Копирование, перемещение, удаление файлов и *
' * просто отслеживание наличия в лог согласно *
' * настроек ini файла. Написано на WSH 5.6 *
' * Можно применять для резервного копирования, *
' * слежения за наличием и.т.д. *
' *******************************************************
' ###############################################
' ######## START #######
' ###############################################
Dim FSO 'Объект файловая система
Dim WSH 'Объект WScript.Shell
Dim WshNetwork 'Объект сеть.
Dim iniFile 'Объект файла настроек
Dim LogFile 'Объект файла лога
Dim WStr 'Строка для записи в лог
Dim CurrStr 'Обработка текущей строки
Dim newStr 'Формирование новой строки
Dim fParam 'Параметр, читаемый из файла настроек
Dim countSymb 'К-во символов
Dim posSymb 'Позиция текущего символа
Dim currSymb 'Текущий символ
Dim iniFileName 'Файл настроек, имя
Dim SDirs 'Список директорий через ";"
Dim countDirs 'Количество директорий
Dim arrayDir(1024) 'Массив директорий
Dim DestFMove 'Директория, куда перемещать файлы
Dim defAction 'Действие по умолчанию
Dim defMoveMax 'Максимальный размер файла, допустимый для копирования, перемещения
Dim cRuleFiles 'Количество правил по файлам
Dim cRuleFolders 'Количество правил по папкам
Dim RuleFile (1024, 1) 'Правила по файлам, содержание и действие
Dim RuleFolder(1024, 1) 'Правила по папкам, содержание и действие
Dim CountD,CountD1 'Счетчики
Dim CurrExt 'Текущее расширение
Dim CondExt 'Условие расширения
Dim CurrRule 'Текущее правило
Dim strPath, strFile 'Путь и имя файла в процедуре обработки
Dim strFullSource 'Путь источника
Dim strFullDest 'Путь назначения
Dim target_dir, BaseName '
Dim NextFolder, ParmFolder '
Dim CountCopy 'Счетчик скопированных
Dim CountMove 'Счетчик перемещенных
Dim CountDelele 'Счетчик удаленных
Dim CountReport 'Счетчик найденых
Dim CountNothing 'Счетчик проигнорированых
Dim CountErrors 'Счетчик ошибок дейчтвий с файлами
Dim currSizeFile 'Размер текущего файла
Dim allSizeFiles 'Подсчет общего размера файлов в байтах.
Dim logSizeFiles 'Общий размер файлов, с опцией "только обнаружить", т.е. "log"
Dim delSizeFiles 'Общий размер файлов, с опцией "удалить", т.е. "del"
Dim copySizeFiles 'Общий размер файлов, с опцией "копировать", т.е. "copy"
Dim moveSizeFiles 'Общий размер файлов, с опцией "переместить", т.е. "move"
Dim nothingSizeFiles 'Общий размер файлов, с опцией "игнорировать", т.е. "nothing"
Dim currFile 'Объект текущий файл.
Dim ShowEndMessage 'Показ сообщения об окончании работы скрипта.
Dim EndMessage 'Текст сообщения об окончании работы скрипта
Dim SecToWaitEndMessage 'Ожидание в секундах до закрытия окна
Dim LogFileName 'Файл лога
Dim StoreLogFile 'Время хранения лога в днях.
Dim LogFileMode 'Режим ведения лога:
'2 - файл открывается для записи. Содержимое файла,
'которое было до этого, уничтожится;
'8 - файл открывается для добавления данных.
'добавление в конец файла.
Dim NetSendEndMessage 'Отправка сообщения по сети.
Dim NetSendAdress 'Сетевой адрес
Dim EmailEndOfMessage 'Отправка сообщения по почте.
Dim EmailAdress 'Почтовый адрес.
Dim IncLogToEmail 'Вложить лог в почтовое сообщение. 1-да, 0-нет.
' ###############################################
' ######## СТАРТ СКРИПТА #######
' ###############################################
On Error Resume Next
CountCopy = 0
CountMove = 0
CountDelele = 0
CountReport = 0
CountNothing = 0
CountErrors = 0
allSizeFiles = 0
logSizeFiles = 0
delSizeFiles = 0
copySizeFiles = 0
moveSizeFiles = 0
nothingSizeFiles = 0
CountErrors = 0
StoreLogFile = 0
SecToWaitEndMessage = 0
Set WSH = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = CreateObject("WScript.Network")
'LogFileName = Year(Date())
'wsh.popup LogFileName
'WScript.Quit()
' ###############################################
' ######## СЧИТАЕМ НАСТРОЙКИ ИЗ ФАЙЛА #######
' ###############################################
If Len(Wscript.arguments.Item(0)) < 1 Then
iniFileName = "fdrl.ini" 'ФАЙЛ НАСТРОЕК ПО УМОЛЧАНИЮ
Else
iniFileName = Wscript.arguments.Item(0) 'ФАЙЛ НАСТРОЕК В КАЧЕСТВЕ ПАРАМЕТРА
End If
iniFileName = GetPath & iniFileName
if (FSO.FileExists(iniFileName)) Then
Set iniFile = FSO.OpenTextFile(iniFileName, 1, true)
Else
wsh.popup ("Файл настроек " & iniFileName & " не найден !")
WScript.Quit()
End If
SDirs = GetParam("SDirs")
DestFolderMove = GetParam("DestFolderMove")
defAction = LCase(GetParam("defAction"))
defMoveMax = abs(GetParam("defMoveMax"))
LogFileMode = GetParam("LogFileMode")
StoreLogFile = GetParam("StoreLogFile")
EndMessage = GetParam("EndMessage")
ShowEndMessage = GetParam("ShowEndMessage")
SecToWaitEndMessage = GetParam("SecToWaitEndMessage")
NetSendEndMessage = GetParam("NetSendEndMessage")
NetSendAdress = GetParam("NetSendAdress")
EmailEndOfMessage = GetParam("EmailEndOfMessage")
EmailAdress = GetParam("EmailAdress")
IncLogToEmail = GetParam("IncLogToEmail")
If Err.number <> 0 then
WStr = "Ошибка чтения файла настроек." & CHR(10)
Wstr = Wstr & "Error N" & Err.number & " " & Err.Description & CHR(10)
Wstr = Wstr & "Завершаем работу программы."
WSH.Popup WStr
WScript.Quit()
End If
'LogFileMode = 2 'РЕЖИМ ВЕДЕНИЯ ЛОГА
'НАЗВАНИЕ ФАЙЛА ЛОГА
LogFileName = GetPath & Year(Date()) & "_" & Month(Date()) & "_" & Day(Date()) & "_" & Hour(Time()) & "_" & Minute(Time()) & "_" & FSO.GetBaseName(iniFileName) & ".log"
Set LogFile = FSO.OpenTextFile(LogFileName, LogFileMode, true)
WStr = "*****************************************************"
WSTL(WStr)
WStr = "* Старт работы. WScript версия " & WScript.Version
WSTL(WStr)
WStr = "*****************************************************"
WSTL(WStr)
WStr = "Настройки файла " & iniFileName
WSTL(WStr)
WStr = "SDirs = " & SDirs
WSTL(WStr)
WStr = "DestFolderMove = " & DestFolderMove
WSTL(WStr)
WStr = "defAction = " & defAction
WSTL(WStr)
WStr = "defMoveMax = " & GetFileSize(defMoveMax)
WSTL(WStr)
WStr = "LogFileMode = " & LogFileMode
WSTL(WStr)
WStr = "ShowEndMessage = " & ShowEndMessage
WSTL(WStr)
WStr = "EndMessage = " & EndMessage
WSTL(WStr)
WStr = "SecToWaitEndMessage = " & SecToWaitEndMessage
WSTL(WStr)
WStr = "StoreLogFile = " & StoreLogFile
WSTL(WStr)
WStr = "NetSendEndMessage = " & NetSendEndMessage
WSTL(WStr)
WStr = "NetSendAdress = " & NetSendAdress
WSTL(WStr)
WStr = "EmailEndOfMessage = " & EmailEndOfMessage
WSTL(WStr)
WStr = "EmailAdress = " & EmailAdress
WSTL(WStr)
WStr = "IncLogToEmail = " & IncLogToEmail
WSTL(WStr)
If Err.number <> 0 then
WSTL ("Ошибка в начале работы скрипта.")
WSTL ("Error N" & Err.number & " " & Err.Description )
Err.number = 0
End If
' ###############################################
' ######## ОБРАБОТАЕМ строку точек входа #######
' ###############################################
countSymb = 0
countSymb = Len(SDirs)
posSymb = 1
currSymb = ""
CurrStr = ""
countDirs = 0
Do While countSymb <> 0
currSymb = mid(SDirs,posSymb,1)
if asc(currSymb)= 59 then
countDirs = countDirs + 1
arrayDir(countDirs) =newStr
newStr = ""
WSTL("Точка входа для поиска №" & countDirs & " " & arrayDir(countDirs))
Else
newStr = newStr & currSymb
End if
countSymb = countSymb - 1
posSymb = posSymb + 1
Loop
If Err.number <> 0 then
WSTL ("Ошибка обработки строки директорий поиска 'SDirs='.")
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
WSTL("Итого количество точек входа для поиска = " & countDirs)
WStr = "-----------------------------------------------------"
WSTL(WStr)
' ###############################################
' ###### Читаем правила для файлов и папок #####
' ###############################################
GetRules()
WSTL("Количество правил для файлов: " & cRuleFiles)
WSTL("Количество правил для папок: " & cRuleFolders)
' ###############################################
' ######## Анализ файлов и папок #######
' ###############################################
Do While countDirs <> 0
WStr = "-----------------------------------------------------"
WSTL(WStr)
WSTL("Начинаем анализ " & arrayDir(countDirs))
Call ProcFolder(arrayDir(countDirs))
WSTL("Окончен анализ " & arrayDir(countDirs))
countDirs = countDirs - 1
Loop
allSizeFiles = logSizeFiles + delSizeFiles + copySizeFiles + moveSizeFiles + nothingSizeFiles
WStr = "-----------------------------------------------------"
WSTL(WStr)
WSTL("Результат работы скрипта:")
WSTL("Cкопировано: " & CountCopy & " " & GetFileSize(copySizeFiles))
WSTL("Перемещено: " & CountMove & " " & GetFileSize(moveSizeFiles))
WSTL("Удалено: " & CountDelele & " " & GetFileSize(delSizeFiles))
WSTL("Найдено: " & CountReport & " " & GetFileSize(logSizeFiles))
WSTL("В игноре: " & CountNothing & " " & GetFileSize(nothingSizeFiles))
WSTL("ИТОГО: " & CountNothing + CountReport + CountDelele + CountMove + CountCopy & " " & GetFileSize(allSizeFiles))
WStr = "*****************************************************"
WSTL(WStr)
WSTL("* КОЛИЧЕСТВО ОШИБОК ОБРАБОТКИ ФАЙЛОВ: "& CountErrors & " ошибок.")
WStr = "*****************************************************"
WSTL(WStr)
If ShowEndMessage = 1 Then
WStr = EndMessage
WSTL(WStr)
wsh.Popup WStr, SecondsToWaitMessage, "Скрипт завершил работу: " & Date() & " " & Time(), 0+64
End If
'NetSendEndMessage
'NetSendAdress
If NetSendEndMessage = 1 Then
WStr = "NET SEND " & NetSendAdress & " " & EndMessage
WSH.Run(WStr)
End If
WshShell.LogEvent 0, EndMessage
' *****************************************************
' *****************************************************
' *****************************************************
' ********* НИЖЕ БЛОК ПРОЦЕДУР *********
' *****************************************************
' *****************************************************
' *****************************************************
' ###############################################
' ######## Байты в кило и мега байты #######
' ###############################################
Function GetFileSize(strByte)
GetFileSize=0
'Если мегабайты
If Abs(strByte/(1024*1024)) > 1 Then
GetFileSize = Round(strByte/(1024*1024),3) & " Мб"
Exit Function
end if
'Если килобайты
If Abs(strByte/1024) > 1 Then
GetFileSize = Round(strByte/(1024),3) & " Кб"
Exit Function
end if
GetFileSize = strByte & " байт"
End Function
' ###############################################
' ######## Обработка файлов. #######
' ###############################################
Sub WorkFile(strPath, strFile, strRule)
On Error Resume Next
strFullSource = strPath & "\" & strFile
strFullDest = Mid(strPath, 3,Len(strPath)-3)
Set currFile = FSO.GetFile(strFullSource)
currSizeFile = currFile.Size
'wstl("Владелец: " & currFile.AvailableSpace)
'МОДИФИЦИРУЕМ НАЗВАНИЕ ФАЙЛА ДЛЯ СОБЛЮДЕНИЯ УНИКАЛЬНОСТИ
countSymb = 1
CurrStr = ""
Do While countSymb <= Len(strFullDest)
If Mid(strFullDest,CountSymb,1) = "\" then
CurrStr = CurrStr & "_"
Else
CurrStr = CurrStr + Mid(strFullDest,CountSymb,1)
End If
CountSymb = CountSymb + 1
Loop
CurrStr = CurrStr & "_F_"
strFullDest = DestFolderMove & "\" & CurrStr & strFile
Err.Clear
Select Case StrRule
Case "log"
'ФАКТ ОБНАРУЖЕНИЯ ФАЙЛА В ЛОГ
WSTL ("Обнаружен " & strFullSource & " " & GetFileSize(currSizeFile))
CountReport = CountReport + 1
logSizeFiles = logSizeFiles + currSizeFile
If Err.number <> 0 then
WSTL ("Ошибка отчета по файлу " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
Case "copy"
'КОПИРУЕМ ФАЙЛ
if defMoveMax <> 0 and currSizeFile > defMoveMax then
WSTL("Файл " & strFullSource & " имеет размер " & GetFileSize(currSizeFile) & ", копирование отменено." )
exit Sub
else
Call FSO.CopyFile (strFullSource, strFullDest)
End if
If Err.number <> 0 then
WSTL ("Ошибка копирования файла " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
WSTL ("Cкопирован " & strFullSource & " в " & strFullDest & " " & GetFileSize(currSizeFile))
CountCopy = CountCopy + 1
copySizeFiles = copySizeFiles + currSizeFile
Case "del"
'УДАЛЯЕМ ФАЙЛ
Call FSO.DeleteFile (strFullSource)
If Err.number <> 0 then
WSTL ("Ошибка удаления файла " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
WSTL ("Удален " & strFullSource & " " & GetFileSize(currSizeFile))
CountDelele = CountDelele + 1
delSizeFiles = delSizeFiles + currSizeFile
Case "move"
'ПЕРЕМЕЩАЕМ ФАЙЛ
if defMoveMax <> 0 and currSizeFile > defMoveMax then
WSTL("Файл " & strFullSource & " имеет размер " & GetFileSize(currSizeFile) & ", перенос отменен." )
Exit Sub
Else
Call FSO.MoveFile (strFullSource, strFullDest)
End if
If Err.number <> 0 then
WSTL ("Ошибка копирования файла " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
WSTL ("Перемещен файл " & strFullSource & " в " & strFullDest & " " & GetFileSize(currSizeFile))
CountMove = CountMove +1
moveSizeFiles = moveSizeFiles + currSizeFile
Case "nothing"
'Ignore rule
CountNothing = CountNothing + 1
nothingSizeFiles = nothingSizeFiles + currSizeFile
Case Else
WSTL ("Ошибка обработки, " & strFullSource & " правило '" & strRule & "' не найдено")
CountErrors = CountErrors + 1
End Select
End Sub
' ###############################################
' ######## Перебор файлов и папок #######
' ###############################################
Sub ProcFolder(ParmFolder)
On Error Resume Next
BaseName = fso.GetAbsolutePathName(ParmFolder)
If fso.GetFolder(BaseName).Files.Count > 0 Then
For Each NextFile In fso.GetFolder(BaseName).Files
Call ProcFile( ParmFolder, NextFile.Name )
Next
End If
If fso.GetFolder(BaseName).SubFolders.Count > 0 Then
For Each NextFolder In fso.GetFolder(BaseName).SubFolders
Call ProcFolder( NextFolder )
Next
End If
If Err.number <> 0 then
WSTL ("Ошибка обработки директории поиска " & arrayDir(countDirs) )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Sub
' ###############################################
' ######## Анализ файлов и действия #######
' ###############################################
Sub ProcFile(BaseName, filename)
On Error Resume Next
CurrRule = ""
'wstl("File: " & BaseName & "\" & filename)
CurrExt = LCase(FSO.GetExtensionName(filename))
CountD = 1
Do While CountD <= cRuleFiles
'Если ищем по расширению
If left(RuleFile (CountD,0),2) = "*." Then
'Если Расширение совпадает, то проверяем наличие правила на папку и
'запускаем подпрограмму обработки файлов.
CondExt = LCase(FSO.GetExtensionName(RuleFile (CountD,0)))
If CurrExt = CondExt then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по расширению " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
End If
End If
'Если правило поиска *####*
If left(RuleFile (CountD,0),1) = "*" and Right(RuleFile (CountD,0),1) = "*" Then
'Если найдено совпадение
if Instr(1, filename, Mid(RuleFile(CountD,0), 2, Len(RuleFile (CountD,0))-2)) > 0 Then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по правилу поиска " & RuleFile (CountD,0) & " , " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
End If
End If
'Если правило поиска *####
If left(RuleFile (CountD,0),2) <> "*." and left(RuleFile (CountD,0),1) = "*" and Right(RuleFile (CountD,0),1) <> "*" Then
'Если соответствует условию
if Mid(RuleFile (CountD,0),2,Len(RuleFile (CountD,0))) = Right(fso.GetBaseName (filename),Len(RuleFile (CountD,0))-1) then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по правилу поиска " & RuleFile (CountD,0) & " , " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
end if
End If
'Если правило поиска ####*
If Right(RuleFile (CountD,0),1) = "*" and Left(RuleFile (CountD,0),1) <> "*"Then
'Если соответствует условию
if Left(fso.GetBaseName (filename) ,Len(RuleFile (CountD,0))-1) = Left(RuleFile (CountD,0) ,Len(RuleFile (CountD,0))-1) then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по правилу поиска " & RuleFile (CountD,0) & " , " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
end if
End If
CountD = CountD +1
Loop
If Err.number <> 0 then
WSTL ("Ошибка анализа файлов и действия " )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Sub
' ###############################################
' ######## Ищем правила на папки #######
' ###############################################
Function FindFolderRule()
On Error Resume Next
CountD1 = 1
Do While CountD1 <= cRuleFolders
If LCase(RuleFolder(CountD1,0)) = LCase(BaseName) then
FindFolderRule = RuleFolder (CountD1,1)
Exit Do
End If
If Left(BaseName, Len(RuleFolder(CountD1,0))) & "\" = RuleFolder(CountD1,0) & "\" then
FindFolderRule = RuleFolder (CountD1,1)
Exit Do
end if
FindFolderRule = ""
CountD1 = CountD1 + 1
Loop
If Err.number <> 0 then
WSTL ("Ошибка поиска правил на папки." )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Function
' ###############################################
' ######## Запись в лог #######
' ###############################################
Sub WSTL(WStr)
On Error Resume Next
WStr = "<" & Date() & " " & Time() & "> " & WStr & " "
LogFile.WriteLine(WStr)
If Err.number <> 0 then
WStr = "Не могу вести лог, проверьте" & CHR(10)
Wstr = Wstr & "права на запись в каталог скрипта." & LogFile & CHR(10)
Wstr = Wstr & "Error N" & Err.number & " " & Err.Description & CHR(10)
Wstr = Wstr & "Завершаем работу программы." & CHR(10)
WSH.Popup WStr
WScript.Quit()
End If
End Sub
' ###############################################
' ######## Узнаем каталог скрипта #######
' ###############################################
Function GetPath
Dim path
path = WScript.ScriptFullName
GetPath = Left(path, InStrRev(path, "\"))
End Function
' ###############################################
' ######## Читаем параметр по умолч. #######
' ###############################################
Function GetParam(fParam)
On Error Resume Next
countSymb = Len(fParam)
'iniFile.
Do While Not iniFile.AtEndOfStream
CurrStr = iniFile.ReadLine
if Left(CurrStr, countSymb) = fParam then
GetParam = Mid(CurrStr, countSymb+2, Len(CurrStr))
'wsh.popup fParam & " = " & GetParam
Exit Do
end if
Loop
countSymb = 0
If Err.number <> 0 then
WSTL ("Ошибка чтения параметров по умолчанию." )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Function
' ###############################################
' ######## Читаем правила #######
' ###############################################
Sub GetRules()
On Error Resume Next
cRuleFiles = 0
cRuleFolders = 0
Do While Not iniFile.AtEndOfStream
CurrStr = iniFile.ReadLine
countSymb = Len(CurrStr)
CurrSymb = Left (CurrStr, 5)
Select Case CurrSymb
Case "File="
cRuleFiles = cRuleFiles + 1
posSymb =1
newStr = ""
CurrStr = Mid(CurrStr, 6, countSymb-5)
countSymb = Len(CurrStr)
Do While countSymb <> 0
currSymb = Mid(CurrStr, posSymb , 1)
if currSymb="," then
RuleFile(cRuleFiles,0) = newStr
newStr = ""
Else
newStr = newStr & currSymb
if countSymb = 1 then
If newStr = "default" then
RuleFile(cRuleFiles,1) = defAction
Else
RuleFile(cRuleFiles,1) = LCase(newStr)
End if
end if
End if
countSymb = countSymb - 1
posSymb = posSymb + 1
Loop
WSTL ("Правило для файлов: " & RuleFile(cRuleFiles,0) & " , действие: " & RuleFile(cRuleFiles,1))
Case "Fold="
cRuleFolders = cRuleFolders + 1
posSymb =1
newStr = ""
CurrStr = Mid(CurrStr, 6, countSymb-5)
countSymb = Len(CurrStr)
Do While countSymb <> 0
currSymb = Mid(CurrStr, posSymb , 1)
if currSymb="," then
RuleFolder(cRuleFolders,0) = newStr
newStr = ""
Else
newStr = newStr & currSymb
if countSymb = 1 then
If newStr = "default" then
RuleFolder(cRuleFolders,1) = defAction
Else
RuleFolder(cRuleFolders,1) = LCase(newStr)
End if
end if
End if
countSymb = countSymb - 1
posSymb = posSymb + 1
Loop
WSTL ("Правило для папок: " & RuleFolder(cRuleFolders,0) & " , действие: " & RuleFolder(cRuleFolders,1))
End Select
Loop
If Err.number <> 0 then
WSTL ("Ошибка чтения правил на файлы и папки." )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Sub[/more]
[more=Вот .ini]#Пример SDirs=C:\testFDRL;D:\;
#ПУТИ ЧУВСТВИТЕЛЬНЫ К РЕГИСТРУ путь должен оканчиваться на ";"
#Диск должен быть в формате 'C:\;' , путь 'C:\windows;'
SDirs=C:\;
#Папка, куда все сливаем.
DestFolderMove=c:\temp
#Операция по умолчанию.
defAction=move
#Ограничение на макс. размер копируемого или перемещаемого файла в байтах.
defMoveMax=0
#Режим ведения лога, 2 - затирать, 8 - добавлять.
LogFileMode=2
#Сколько дней хранить логи, 0 - не удалять.
StoreLogFile=10
#Текст сообщения об окончании работы скрипта
EndMessage=Поиск и подсчет файлов изображений, музыки и видео в папках C:\testFDRL;C:\testFDRL1.
#Показ сообщения об окончании работы скрипта. 1-да, 0-нет.
ShowEndMessage=0
#Сколько секунд не закрывать окно, 0 - не закрывать.
SecToWaitEndMessage=5
#Отправка сообщения по сети. 1-да, 0-нет. не реализовано
NetSendEndMessage=0
#Сетевой адрес
NetSendAdress=wnr04031
#Отправка сообщения по почте. 1-да, 0-нет. не реализовано
EmailEndOfMessage=0
#Почтовый адрес.
EmailAdress=no@no.no
#Вложить лог в почтовое сообщение. 1-да, 0-нет.
IncLogToEmail=1
# Расшифровка действий с файлами:
# log - только в лог
# copy - копировать
# del - удалять
# move - перемещать
# nothing - игнорировать
File=*.mp3,copy
#File=*.mp4,log
#File=*.avi,log
#File=*.mov,log
#File=*.flv,log
#File=*.bmp,log
#File=*.jpg,log
#File=*.flv,log
#File=*.wmv,log
#ПРАВИЛА НА ФАЙЛЫ В ПАПКАХ (распостраняются на файлы в этих каталогах).
#Fold=U:\System,nothing
#Fold=U:\Hidden,nothing[/more]
а в логе выдает
Antonov_Berega.mp3 правило 'copy ' не найдено
Настраиваемый обработчик файлов *
Копирование, перемещение, удаление файлов и *
просто отслеживание наличия в лог согласно *
настроек ini файла.
[more=Сам скрипт]' *******************************************************
' * Find Delete Read Log v.1.0 *
' * 15.08.2006, Polo (C) ГИВЦ *
' * Настраиваемый обработчик файлов *
' * Копирование, перемещение, удаление файлов и *
' * просто отслеживание наличия в лог согласно *
' * настроек ini файла. Написано на WSH 5.6 *
' * Можно применять для резервного копирования, *
' * слежения за наличием и.т.д. *
' *******************************************************
' ###############################################
' ######## START #######
' ###############################################
Dim FSO 'Объект файловая система
Dim WSH 'Объект WScript.Shell
Dim WshNetwork 'Объект сеть.
Dim iniFile 'Объект файла настроек
Dim LogFile 'Объект файла лога
Dim WStr 'Строка для записи в лог
Dim CurrStr 'Обработка текущей строки
Dim newStr 'Формирование новой строки
Dim fParam 'Параметр, читаемый из файла настроек
Dim countSymb 'К-во символов
Dim posSymb 'Позиция текущего символа
Dim currSymb 'Текущий символ
Dim iniFileName 'Файл настроек, имя
Dim SDirs 'Список директорий через ";"
Dim countDirs 'Количество директорий
Dim arrayDir(1024) 'Массив директорий
Dim DestFMove 'Директория, куда перемещать файлы
Dim defAction 'Действие по умолчанию
Dim defMoveMax 'Максимальный размер файла, допустимый для копирования, перемещения
Dim cRuleFiles 'Количество правил по файлам
Dim cRuleFolders 'Количество правил по папкам
Dim RuleFile (1024, 1) 'Правила по файлам, содержание и действие
Dim RuleFolder(1024, 1) 'Правила по папкам, содержание и действие
Dim CountD,CountD1 'Счетчики
Dim CurrExt 'Текущее расширение
Dim CondExt 'Условие расширения
Dim CurrRule 'Текущее правило
Dim strPath, strFile 'Путь и имя файла в процедуре обработки
Dim strFullSource 'Путь источника
Dim strFullDest 'Путь назначения
Dim target_dir, BaseName '
Dim NextFolder, ParmFolder '
Dim CountCopy 'Счетчик скопированных
Dim CountMove 'Счетчик перемещенных
Dim CountDelele 'Счетчик удаленных
Dim CountReport 'Счетчик найденых
Dim CountNothing 'Счетчик проигнорированых
Dim CountErrors 'Счетчик ошибок дейчтвий с файлами
Dim currSizeFile 'Размер текущего файла
Dim allSizeFiles 'Подсчет общего размера файлов в байтах.
Dim logSizeFiles 'Общий размер файлов, с опцией "только обнаружить", т.е. "log"
Dim delSizeFiles 'Общий размер файлов, с опцией "удалить", т.е. "del"
Dim copySizeFiles 'Общий размер файлов, с опцией "копировать", т.е. "copy"
Dim moveSizeFiles 'Общий размер файлов, с опцией "переместить", т.е. "move"
Dim nothingSizeFiles 'Общий размер файлов, с опцией "игнорировать", т.е. "nothing"
Dim currFile 'Объект текущий файл.
Dim ShowEndMessage 'Показ сообщения об окончании работы скрипта.
Dim EndMessage 'Текст сообщения об окончании работы скрипта
Dim SecToWaitEndMessage 'Ожидание в секундах до закрытия окна
Dim LogFileName 'Файл лога
Dim StoreLogFile 'Время хранения лога в днях.
Dim LogFileMode 'Режим ведения лога:
'2 - файл открывается для записи. Содержимое файла,
'которое было до этого, уничтожится;
'8 - файл открывается для добавления данных.
'добавление в конец файла.
Dim NetSendEndMessage 'Отправка сообщения по сети.
Dim NetSendAdress 'Сетевой адрес
Dim EmailEndOfMessage 'Отправка сообщения по почте.
Dim EmailAdress 'Почтовый адрес.
Dim IncLogToEmail 'Вложить лог в почтовое сообщение. 1-да, 0-нет.
' ###############################################
' ######## СТАРТ СКРИПТА #######
' ###############################################
On Error Resume Next
CountCopy = 0
CountMove = 0
CountDelele = 0
CountReport = 0
CountNothing = 0
CountErrors = 0
allSizeFiles = 0
logSizeFiles = 0
delSizeFiles = 0
copySizeFiles = 0
moveSizeFiles = 0
nothingSizeFiles = 0
CountErrors = 0
StoreLogFile = 0
SecToWaitEndMessage = 0
Set WSH = WScript.CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshNetwork = CreateObject("WScript.Network")
'LogFileName = Year(Date())
'wsh.popup LogFileName
'WScript.Quit()
' ###############################################
' ######## СЧИТАЕМ НАСТРОЙКИ ИЗ ФАЙЛА #######
' ###############################################
If Len(Wscript.arguments.Item(0)) < 1 Then
iniFileName = "fdrl.ini" 'ФАЙЛ НАСТРОЕК ПО УМОЛЧАНИЮ
Else
iniFileName = Wscript.arguments.Item(0) 'ФАЙЛ НАСТРОЕК В КАЧЕСТВЕ ПАРАМЕТРА
End If
iniFileName = GetPath & iniFileName
if (FSO.FileExists(iniFileName)) Then
Set iniFile = FSO.OpenTextFile(iniFileName, 1, true)
Else
wsh.popup ("Файл настроек " & iniFileName & " не найден !")
WScript.Quit()
End If
SDirs = GetParam("SDirs")
DestFolderMove = GetParam("DestFolderMove")
defAction = LCase(GetParam("defAction"))
defMoveMax = abs(GetParam("defMoveMax"))
LogFileMode = GetParam("LogFileMode")
StoreLogFile = GetParam("StoreLogFile")
EndMessage = GetParam("EndMessage")
ShowEndMessage = GetParam("ShowEndMessage")
SecToWaitEndMessage = GetParam("SecToWaitEndMessage")
NetSendEndMessage = GetParam("NetSendEndMessage")
NetSendAdress = GetParam("NetSendAdress")
EmailEndOfMessage = GetParam("EmailEndOfMessage")
EmailAdress = GetParam("EmailAdress")
IncLogToEmail = GetParam("IncLogToEmail")
If Err.number <> 0 then
WStr = "Ошибка чтения файла настроек." & CHR(10)
Wstr = Wstr & "Error N" & Err.number & " " & Err.Description & CHR(10)
Wstr = Wstr & "Завершаем работу программы."
WSH.Popup WStr
WScript.Quit()
End If
'LogFileMode = 2 'РЕЖИМ ВЕДЕНИЯ ЛОГА
'НАЗВАНИЕ ФАЙЛА ЛОГА
LogFileName = GetPath & Year(Date()) & "_" & Month(Date()) & "_" & Day(Date()) & "_" & Hour(Time()) & "_" & Minute(Time()) & "_" & FSO.GetBaseName(iniFileName) & ".log"
Set LogFile = FSO.OpenTextFile(LogFileName, LogFileMode, true)
WStr = "*****************************************************"
WSTL(WStr)
WStr = "* Старт работы. WScript версия " & WScript.Version
WSTL(WStr)
WStr = "*****************************************************"
WSTL(WStr)
WStr = "Настройки файла " & iniFileName
WSTL(WStr)
WStr = "SDirs = " & SDirs
WSTL(WStr)
WStr = "DestFolderMove = " & DestFolderMove
WSTL(WStr)
WStr = "defAction = " & defAction
WSTL(WStr)
WStr = "defMoveMax = " & GetFileSize(defMoveMax)
WSTL(WStr)
WStr = "LogFileMode = " & LogFileMode
WSTL(WStr)
WStr = "ShowEndMessage = " & ShowEndMessage
WSTL(WStr)
WStr = "EndMessage = " & EndMessage
WSTL(WStr)
WStr = "SecToWaitEndMessage = " & SecToWaitEndMessage
WSTL(WStr)
WStr = "StoreLogFile = " & StoreLogFile
WSTL(WStr)
WStr = "NetSendEndMessage = " & NetSendEndMessage
WSTL(WStr)
WStr = "NetSendAdress = " & NetSendAdress
WSTL(WStr)
WStr = "EmailEndOfMessage = " & EmailEndOfMessage
WSTL(WStr)
WStr = "EmailAdress = " & EmailAdress
WSTL(WStr)
WStr = "IncLogToEmail = " & IncLogToEmail
WSTL(WStr)
If Err.number <> 0 then
WSTL ("Ошибка в начале работы скрипта.")
WSTL ("Error N" & Err.number & " " & Err.Description )
Err.number = 0
End If
' ###############################################
' ######## ОБРАБОТАЕМ строку точек входа #######
' ###############################################
countSymb = 0
countSymb = Len(SDirs)
posSymb = 1
currSymb = ""
CurrStr = ""
countDirs = 0
Do While countSymb <> 0
currSymb = mid(SDirs,posSymb,1)
if asc(currSymb)= 59 then
countDirs = countDirs + 1
arrayDir(countDirs) =newStr
newStr = ""
WSTL("Точка входа для поиска №" & countDirs & " " & arrayDir(countDirs))
Else
newStr = newStr & currSymb
End if
countSymb = countSymb - 1
posSymb = posSymb + 1
Loop
If Err.number <> 0 then
WSTL ("Ошибка обработки строки директорий поиска 'SDirs='.")
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
WSTL("Итого количество точек входа для поиска = " & countDirs)
WStr = "-----------------------------------------------------"
WSTL(WStr)
' ###############################################
' ###### Читаем правила для файлов и папок #####
' ###############################################
GetRules()
WSTL("Количество правил для файлов: " & cRuleFiles)
WSTL("Количество правил для папок: " & cRuleFolders)
' ###############################################
' ######## Анализ файлов и папок #######
' ###############################################
Do While countDirs <> 0
WStr = "-----------------------------------------------------"
WSTL(WStr)
WSTL("Начинаем анализ " & arrayDir(countDirs))
Call ProcFolder(arrayDir(countDirs))
WSTL("Окончен анализ " & arrayDir(countDirs))
countDirs = countDirs - 1
Loop
allSizeFiles = logSizeFiles + delSizeFiles + copySizeFiles + moveSizeFiles + nothingSizeFiles
WStr = "-----------------------------------------------------"
WSTL(WStr)
WSTL("Результат работы скрипта:")
WSTL("Cкопировано: " & CountCopy & " " & GetFileSize(copySizeFiles))
WSTL("Перемещено: " & CountMove & " " & GetFileSize(moveSizeFiles))
WSTL("Удалено: " & CountDelele & " " & GetFileSize(delSizeFiles))
WSTL("Найдено: " & CountReport & " " & GetFileSize(logSizeFiles))
WSTL("В игноре: " & CountNothing & " " & GetFileSize(nothingSizeFiles))
WSTL("ИТОГО: " & CountNothing + CountReport + CountDelele + CountMove + CountCopy & " " & GetFileSize(allSizeFiles))
WStr = "*****************************************************"
WSTL(WStr)
WSTL("* КОЛИЧЕСТВО ОШИБОК ОБРАБОТКИ ФАЙЛОВ: "& CountErrors & " ошибок.")
WStr = "*****************************************************"
WSTL(WStr)
If ShowEndMessage = 1 Then
WStr = EndMessage
WSTL(WStr)
wsh.Popup WStr, SecondsToWaitMessage, "Скрипт завершил работу: " & Date() & " " & Time(), 0+64
End If
'NetSendEndMessage
'NetSendAdress
If NetSendEndMessage = 1 Then
WStr = "NET SEND " & NetSendAdress & " " & EndMessage
WSH.Run(WStr)
End If
WshShell.LogEvent 0, EndMessage
' *****************************************************
' *****************************************************
' *****************************************************
' ********* НИЖЕ БЛОК ПРОЦЕДУР *********
' *****************************************************
' *****************************************************
' *****************************************************
' ###############################################
' ######## Байты в кило и мега байты #######
' ###############################################
Function GetFileSize(strByte)
GetFileSize=0
'Если мегабайты
If Abs(strByte/(1024*1024)) > 1 Then
GetFileSize = Round(strByte/(1024*1024),3) & " Мб"
Exit Function
end if
'Если килобайты
If Abs(strByte/1024) > 1 Then
GetFileSize = Round(strByte/(1024),3) & " Кб"
Exit Function
end if
GetFileSize = strByte & " байт"
End Function
' ###############################################
' ######## Обработка файлов. #######
' ###############################################
Sub WorkFile(strPath, strFile, strRule)
On Error Resume Next
strFullSource = strPath & "\" & strFile
strFullDest = Mid(strPath, 3,Len(strPath)-3)
Set currFile = FSO.GetFile(strFullSource)
currSizeFile = currFile.Size
'wstl("Владелец: " & currFile.AvailableSpace)
'МОДИФИЦИРУЕМ НАЗВАНИЕ ФАЙЛА ДЛЯ СОБЛЮДЕНИЯ УНИКАЛЬНОСТИ
countSymb = 1
CurrStr = ""
Do While countSymb <= Len(strFullDest)
If Mid(strFullDest,CountSymb,1) = "\" then
CurrStr = CurrStr & "_"
Else
CurrStr = CurrStr + Mid(strFullDest,CountSymb,1)
End If
CountSymb = CountSymb + 1
Loop
CurrStr = CurrStr & "_F_"
strFullDest = DestFolderMove & "\" & CurrStr & strFile
Err.Clear
Select Case StrRule
Case "log"
'ФАКТ ОБНАРУЖЕНИЯ ФАЙЛА В ЛОГ
WSTL ("Обнаружен " & strFullSource & " " & GetFileSize(currSizeFile))
CountReport = CountReport + 1
logSizeFiles = logSizeFiles + currSizeFile
If Err.number <> 0 then
WSTL ("Ошибка отчета по файлу " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
Case "copy"
'КОПИРУЕМ ФАЙЛ
if defMoveMax <> 0 and currSizeFile > defMoveMax then
WSTL("Файл " & strFullSource & " имеет размер " & GetFileSize(currSizeFile) & ", копирование отменено." )
exit Sub
else
Call FSO.CopyFile (strFullSource, strFullDest)
End if
If Err.number <> 0 then
WSTL ("Ошибка копирования файла " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
WSTL ("Cкопирован " & strFullSource & " в " & strFullDest & " " & GetFileSize(currSizeFile))
CountCopy = CountCopy + 1
copySizeFiles = copySizeFiles + currSizeFile
Case "del"
'УДАЛЯЕМ ФАЙЛ
Call FSO.DeleteFile (strFullSource)
If Err.number <> 0 then
WSTL ("Ошибка удаления файла " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
WSTL ("Удален " & strFullSource & " " & GetFileSize(currSizeFile))
CountDelele = CountDelele + 1
delSizeFiles = delSizeFiles + currSizeFile
Case "move"
'ПЕРЕМЕЩАЕМ ФАЙЛ
if defMoveMax <> 0 and currSizeFile > defMoveMax then
WSTL("Файл " & strFullSource & " имеет размер " & GetFileSize(currSizeFile) & ", перенос отменен." )
Exit Sub
Else
Call FSO.MoveFile (strFullSource, strFullDest)
End if
If Err.number <> 0 then
WSTL ("Ошибка копирования файла " & strFullSource)
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
CountErrors = CountErrors + 1
End If
WSTL ("Перемещен файл " & strFullSource & " в " & strFullDest & " " & GetFileSize(currSizeFile))
CountMove = CountMove +1
moveSizeFiles = moveSizeFiles + currSizeFile
Case "nothing"
'Ignore rule
CountNothing = CountNothing + 1
nothingSizeFiles = nothingSizeFiles + currSizeFile
Case Else
WSTL ("Ошибка обработки, " & strFullSource & " правило '" & strRule & "' не найдено")
CountErrors = CountErrors + 1
End Select
End Sub
' ###############################################
' ######## Перебор файлов и папок #######
' ###############################################
Sub ProcFolder(ParmFolder)
On Error Resume Next
BaseName = fso.GetAbsolutePathName(ParmFolder)
If fso.GetFolder(BaseName).Files.Count > 0 Then
For Each NextFile In fso.GetFolder(BaseName).Files
Call ProcFile( ParmFolder, NextFile.Name )
Next
End If
If fso.GetFolder(BaseName).SubFolders.Count > 0 Then
For Each NextFolder In fso.GetFolder(BaseName).SubFolders
Call ProcFolder( NextFolder )
Next
End If
If Err.number <> 0 then
WSTL ("Ошибка обработки директории поиска " & arrayDir(countDirs) )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Sub
' ###############################################
' ######## Анализ файлов и действия #######
' ###############################################
Sub ProcFile(BaseName, filename)
On Error Resume Next
CurrRule = ""
'wstl("File: " & BaseName & "\" & filename)
CurrExt = LCase(FSO.GetExtensionName(filename))
CountD = 1
Do While CountD <= cRuleFiles
'Если ищем по расширению
If left(RuleFile (CountD,0),2) = "*." Then
'Если Расширение совпадает, то проверяем наличие правила на папку и
'запускаем подпрограмму обработки файлов.
CondExt = LCase(FSO.GetExtensionName(RuleFile (CountD,0)))
If CurrExt = CondExt then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по расширению " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
End If
End If
'Если правило поиска *####*
If left(RuleFile (CountD,0),1) = "*" and Right(RuleFile (CountD,0),1) = "*" Then
'Если найдено совпадение
if Instr(1, filename, Mid(RuleFile(CountD,0), 2, Len(RuleFile (CountD,0))-2)) > 0 Then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по правилу поиска " & RuleFile (CountD,0) & " , " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
End If
End If
'Если правило поиска *####
If left(RuleFile (CountD,0),2) <> "*." and left(RuleFile (CountD,0),1) = "*" and Right(RuleFile (CountD,0),1) <> "*" Then
'Если соответствует условию
if Mid(RuleFile (CountD,0),2,Len(RuleFile (CountD,0))) = Right(fso.GetBaseName (filename),Len(RuleFile (CountD,0))-1) then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по правилу поиска " & RuleFile (CountD,0) & " , " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
end if
End If
'Если правило поиска ####*
If Right(RuleFile (CountD,0),1) = "*" and Left(RuleFile (CountD,0),1) <> "*"Then
'Если соответствует условию
if Left(fso.GetBaseName (filename) ,Len(RuleFile (CountD,0))-1) = Left(RuleFile (CountD,0) ,Len(RuleFile (CountD,0))-1) then
CurrRule = RuleFile (CountD,1)
'WSTL ("Найден файл по правилу поиска " & RuleFile (CountD,0) & " , " & BaseName & "\" & filename & " , " & CurrRule)
'Проверка на правило для папки
If FindFolderRule() <> "" then
CurrRule = FindFolderRule()
'WSTL("Правило изменено на " & currRule)
End If
Call WorkFile(BaseName, filename, currRule)
end if
End If
CountD = CountD +1
Loop
If Err.number <> 0 then
WSTL ("Ошибка анализа файлов и действия " )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Sub
' ###############################################
' ######## Ищем правила на папки #######
' ###############################################
Function FindFolderRule()
On Error Resume Next
CountD1 = 1
Do While CountD1 <= cRuleFolders
If LCase(RuleFolder(CountD1,0)) = LCase(BaseName) then
FindFolderRule = RuleFolder (CountD1,1)
Exit Do
End If
If Left(BaseName, Len(RuleFolder(CountD1,0))) & "\" = RuleFolder(CountD1,0) & "\" then
FindFolderRule = RuleFolder (CountD1,1)
Exit Do
end if
FindFolderRule = ""
CountD1 = CountD1 + 1
Loop
If Err.number <> 0 then
WSTL ("Ошибка поиска правил на папки." )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Function
' ###############################################
' ######## Запись в лог #######
' ###############################################
Sub WSTL(WStr)
On Error Resume Next
WStr = "<" & Date() & " " & Time() & "> " & WStr & " "
LogFile.WriteLine(WStr)
If Err.number <> 0 then
WStr = "Не могу вести лог, проверьте" & CHR(10)
Wstr = Wstr & "права на запись в каталог скрипта." & LogFile & CHR(10)
Wstr = Wstr & "Error N" & Err.number & " " & Err.Description & CHR(10)
Wstr = Wstr & "Завершаем работу программы." & CHR(10)
WSH.Popup WStr
WScript.Quit()
End If
End Sub
' ###############################################
' ######## Узнаем каталог скрипта #######
' ###############################################
Function GetPath
Dim path
path = WScript.ScriptFullName
GetPath = Left(path, InStrRev(path, "\"))
End Function
' ###############################################
' ######## Читаем параметр по умолч. #######
' ###############################################
Function GetParam(fParam)
On Error Resume Next
countSymb = Len(fParam)
'iniFile.
Do While Not iniFile.AtEndOfStream
CurrStr = iniFile.ReadLine
if Left(CurrStr, countSymb) = fParam then
GetParam = Mid(CurrStr, countSymb+2, Len(CurrStr))
'wsh.popup fParam & " = " & GetParam
Exit Do
end if
Loop
countSymb = 0
If Err.number <> 0 then
WSTL ("Ошибка чтения параметров по умолчанию." )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Function
' ###############################################
' ######## Читаем правила #######
' ###############################################
Sub GetRules()
On Error Resume Next
cRuleFiles = 0
cRuleFolders = 0
Do While Not iniFile.AtEndOfStream
CurrStr = iniFile.ReadLine
countSymb = Len(CurrStr)
CurrSymb = Left (CurrStr, 5)
Select Case CurrSymb
Case "File="
cRuleFiles = cRuleFiles + 1
posSymb =1
newStr = ""
CurrStr = Mid(CurrStr, 6, countSymb-5)
countSymb = Len(CurrStr)
Do While countSymb <> 0
currSymb = Mid(CurrStr, posSymb , 1)
if currSymb="," then
RuleFile(cRuleFiles,0) = newStr
newStr = ""
Else
newStr = newStr & currSymb
if countSymb = 1 then
If newStr = "default" then
RuleFile(cRuleFiles,1) = defAction
Else
RuleFile(cRuleFiles,1) = LCase(newStr)
End if
end if
End if
countSymb = countSymb - 1
posSymb = posSymb + 1
Loop
WSTL ("Правило для файлов: " & RuleFile(cRuleFiles,0) & " , действие: " & RuleFile(cRuleFiles,1))
Case "Fold="
cRuleFolders = cRuleFolders + 1
posSymb =1
newStr = ""
CurrStr = Mid(CurrStr, 6, countSymb-5)
countSymb = Len(CurrStr)
Do While countSymb <> 0
currSymb = Mid(CurrStr, posSymb , 1)
if currSymb="," then
RuleFolder(cRuleFolders,0) = newStr
newStr = ""
Else
newStr = newStr & currSymb
if countSymb = 1 then
If newStr = "default" then
RuleFolder(cRuleFolders,1) = defAction
Else
RuleFolder(cRuleFolders,1) = LCase(newStr)
End if
end if
End if
countSymb = countSymb - 1
posSymb = posSymb + 1
Loop
WSTL ("Правило для папок: " & RuleFolder(cRuleFolders,0) & " , действие: " & RuleFolder(cRuleFolders,1))
End Select
Loop
If Err.number <> 0 then
WSTL ("Ошибка чтения правил на файлы и папки." )
WSTL ("Error N" & Err.number & " " & Err.Description)
Err.number = 0
End If
End Sub[/more]
[more=Вот .ini]#Пример SDirs=C:\testFDRL;D:\;
#ПУТИ ЧУВСТВИТЕЛЬНЫ К РЕГИСТРУ путь должен оканчиваться на ";"
#Диск должен быть в формате 'C:\;' , путь 'C:\windows;'
SDirs=C:\;
#Папка, куда все сливаем.
DestFolderMove=c:\temp
#Операция по умолчанию.
defAction=move
#Ограничение на макс. размер копируемого или перемещаемого файла в байтах.
defMoveMax=0
#Режим ведения лога, 2 - затирать, 8 - добавлять.
LogFileMode=2
#Сколько дней хранить логи, 0 - не удалять.
StoreLogFile=10
#Текст сообщения об окончании работы скрипта
EndMessage=Поиск и подсчет файлов изображений, музыки и видео в папках C:\testFDRL;C:\testFDRL1.
#Показ сообщения об окончании работы скрипта. 1-да, 0-нет.
ShowEndMessage=0
#Сколько секунд не закрывать окно, 0 - не закрывать.
SecToWaitEndMessage=5
#Отправка сообщения по сети. 1-да, 0-нет. не реализовано
NetSendEndMessage=0
#Сетевой адрес
NetSendAdress=wnr04031
#Отправка сообщения по почте. 1-да, 0-нет. не реализовано
EmailEndOfMessage=0
#Почтовый адрес.
EmailAdress=no@no.no
#Вложить лог в почтовое сообщение. 1-да, 0-нет.
IncLogToEmail=1
# Расшифровка действий с файлами:
# log - только в лог
# copy - копировать
# del - удалять
# move - перемещать
# nothing - игнорировать
File=*.mp3,copy
#File=*.mp4,log
#File=*.avi,log
#File=*.mov,log
#File=*.flv,log
#File=*.bmp,log
#File=*.jpg,log
#File=*.flv,log
#File=*.wmv,log
#ПРАВИЛА НА ФАЙЛЫ В ПАПКАХ (распостраняются на файлы в этих каталогах).
#Fold=U:\System,nothing
#Fold=U:\Hidden,nothing[/more]
а в логе выдает
Antonov_Berega.mp3 правило 'copy ' не найдено