AutoIt: 3.3.12.0
Версия: 1.0
Категория: Файловая система
Описание: Есть необходимость администрирования сетевой папки в локальной сети. Структура сетевой папки проста. Внутри нее содержатся именные папки по фамилиям работников нашей организации. Задача проста. Периодически (запуская вручную данный скрипт) выявить, в какой из именных папок изменился размер. Поскольку корневая папки имеет ограниченную квоту на размер, важно понимать кто из пользователей сожрал слишком много места.
На самом деле найти применение данного скрипта можно и на локальном ПК. Скрипт дает возможность выбрать любую папку для проверки в любом месте (на ПК или в локальной сети значения не имеет).
Принцип работы программы.
При первом запуске выбираем папку для проверки. Создается лог файл, в нем сохраняется путь к выбранной папке, чтобы при следующем запуске заново не выбирать. В папке со скриптом создается папка с названием выбранной папки. Внутри нее после отработки скрипта (по GUI кнопке проверки размера папки) будут созданы файлы .log и .xls с результатами. Лог файл носит факультативный характер (так для информации), а файл xls сделан как основной. Данный вставляются в три столбца. Второй и третий столбцы – путь к проверяемой подпапке и ее размер. Первый столбец – разница между размером папки при предыдущей проверке и при текущей (дельта). Разумеется разница считается при второй и последующих проверках, при первом запуске разница равна текущему размеру подпапки.
Для работы требуется библиотека FileOperations.au3 (во вложении).
Код/Пример:
Источник: autoit-script.ru
Автор(ы): Malderin
Версия: 1.0
Категория: Файловая система
Описание: Есть необходимость администрирования сетевой папки в локальной сети. Структура сетевой папки проста. Внутри нее содержатся именные папки по фамилиям работников нашей организации. Задача проста. Периодически (запуская вручную данный скрипт) выявить, в какой из именных папок изменился размер. Поскольку корневая папки имеет ограниченную квоту на размер, важно понимать кто из пользователей сожрал слишком много места.
На самом деле найти применение данного скрипта можно и на локальном ПК. Скрипт дает возможность выбрать любую папку для проверки в любом месте (на ПК или в локальной сети значения не имеет).
Принцип работы программы.
При первом запуске выбираем папку для проверки. Создается лог файл, в нем сохраняется путь к выбранной папке, чтобы при следующем запуске заново не выбирать. В папке со скриптом создается папка с названием выбранной папки. Внутри нее после отработки скрипта (по GUI кнопке проверки размера папки) будут созданы файлы .log и .xls с результатами. Лог файл носит факультативный характер (так для информации), а файл xls сделан как основной. Данный вставляются в три столбца. Второй и третий столбцы – путь к проверяемой подпапке и ее размер. Первый столбец – разница между размером папки при предыдущей проверке и при текущей (дельта). Разумеется разница считается при второй и последующих проверках, при первом запуске разница равна текущему размеру подпапки.
Для работы требуется библиотека FileOperations.au3 (во вложении).
Код/Пример:
Код:
#Include <FileOperations.au3>
#include <Array.au3>
#Include <FileOperations.au3>
#include <Excel.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <ProgressConstants.au3>
$Path1 = @ScriptDir&"\script.log" ;Путь к файлу ini
$Path_904 = IniRead($Path1, "Path", "Value", "Путь не выбран")
If $Path_904 = "Путь не выбран" Then
IniWrite($Path1, "Path", "Value", "Путь не выбран")
EndIf
$hGui = GUICreate("Проверка размера папки", 450, 180, -1, -1, $WS_OVERLAPPEDWINDOW + $WS_POPUP)
$path_11 = GUICtrlCreateLabel("Текущая папка для проверки: ", 10, 10, 150)
$iButton = GUICtrlCreateButton("Изменить", 10, 49, 85, 20)
$start = GUICtrlCreateButton("Начать проверку размера папки", 10, 80, 300, 40, $BS_DEFPUSHBUTTON)
$xlsopen = GUICtrlCreateButton("Открыть в Excel", 315, 80, 130, 40, $BS_DEFPUSHBUTTON)
GUICtrlSetState($xlsopen, $GUI_DISABLE)
$prog2 = GUICtrlCreateLabel($Path_904, 10, 25, 425)
$progres = GUICtrlCreateLabel(".........", 10, 125, 425, 26)
$progressbar2 = GUICtrlCreateProgress(5, 155, 440, 20)
GUICtrlSetColor(-1, 32250)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $iButton
$Path_904 = FileSelectFolder('Выберите папку', '', 3, @ScriptDir, $hGui)
$Dir_Name = ".*\\(.*)"
$F_Name = "_" & StringRegExpReplace($Path_904, $Dir_Name, "$1")
DirCreate ( @ScriptDir & "\" & $F_Name)
$path2 = @ScriptDir & "\" & $F_Name & "\" & $F_Name & ".log"
IniWrite($path2, "path", "Value", $Path_904)
IniWrite($path1, "path", "Value", $Path_904)
MsgBox(4096, 'Выбрана папка', $Path_904)
GUICtrlSetState($prog2, $GUI_HIDE)
GUICtrlSetData($prog2, $Path_904)
GUICtrlSetState($prog2, $GUI_SHOW)
GUICtrlSetTip ($prog2, $Path_904)
Case $start
Disable()
Razmer ()
Enable()
Case $xlsopen
$Dir_Name = ".*\\(.*)"
$F_Name = "_" & StringRegExpReplace($Path_904, $Dir_Name, "$1")
$oExcel = _ExcelBookOpen(@ScriptDir & "\" & $F_Name & "\" & $F_Name & ".xls")
Case $GUI_EVENT_CLOSE
ExitLoop
EndSwitch
WEnd
GUIDelete()
Func Razmer()
$Date = StringFormat("%04d.%02d.%02d %02d:%02d:%02d", @YEAR, @MON, @MDAY, @HOUR, @MIN, @SEC)
$hTimer = TimerInit()
$res = DirGetSize($path_904, 1)
$iDiff = Round(TimerDiff($hTimer) / 1000, 2) ; время в секундах
$size = Round($res[0]/1024/1024, 2)
$size1 = $size
Global $Folder = _FO_FolderSearch($Path_904, '', True, 0)
$j = (100/$Folder[0])
If @error = 3 Then
MsgBox(4096, "Завершено", "Вложенные папки отстутсвуют")
Exit
EndIf
$Dir_Name = ".*\\(.*)"
$F_Name = "_" & StringRegExpReplace($Path_904, $Dir_Name, "$1")
$path2 = @ScriptDir & "\" & $F_Name & "\" & $F_Name & ".log"
;~ ConsoleWrite($path2 & @LF)
;~ Sleep(3000)
IniWriteSection($path2, $path_904 & "; " & $Date, "Общий размер =" & $size & " Мб")
$oExcel = _ExcelBookOpen(@ScriptDir & "\" & $F_Name & "\" & $F_Name & ".xls",0)
If @error Then
MsgBox(4096, "Ошибка", "Файл " & $F_Name & "\" & $F_Name & ".xls" & " не существует, создан новый файл")
$Excel = _ExcelBookNew(0)
_ExcelBookSaveAs($Excel, @ScriptDir & "\" & $F_Name & "\" & $F_Name)
_ExcelBookClose($Excel)
$oExcel = _ExcelBookOpen(@ScriptDir & "\" & $F_Name & "\" & $F_Name & ".xls",0)
EndIf
_ExcelColumnInsert($oExcel, 1 , 3)
_ExcelWriteCell($oExcel, "Дата проверки: " & $Date, 1, 1)
_ExcelWriteCell($oExcel, "Общий размер =" & $size & " Мб", 1, 2)
_ExcelColumnInsert($oExcel, 1 , 1)
_ExcelWriteCell($oExcel, "Дельта (Мб)", 1, 1)
For $i=1 To $Folder[0]
;~ ConsoleWrite($Folder[$i] & @LF)
$dirsize = DirGetSize($Folder[$i], 1)
$size = Round($dirsize[0]/1024/1024, 2)
IniWrite($path2, $path_904 & "; " & $Date, $Folder[$i], $size)
_ExcelWriteCell($oExcel, $Folder[$i], $i+2, 2)
_ExcelWriteCell($oExcel, $size, $i+2, 3)
_ExcelWriteCell($oExcel, "=C" & $i+2 & "-G" & $i+2, $i+2, 1)
GUICtrlSetState($progres, $GUI_HIDE)
GUICtrlSetData($progres, "Обработка: " & $Folder[$i])
GUICtrlSetState($progres, $GUI_SHOW)
GUICtrlSetData($progressbar2, ($i*$j))
Next
Excel_($oExcel)
GUICtrlSetState($progres, $GUI_HIDE)
GUICtrlSetData($progres, "Обработано папок: " & $Folder[0])
GUICtrlSetState($progres, $GUI_SHOW)
IniWrite($path2, $path_904 & "; " & $Date, "======== end of statistic", " =========")
_ExcelBookSave($oExcel)
_ExcelBookClose($oExcel, 0, 1)
If IsArray($res) Then
MsgBox(4096, "Результат", _
"Размер (Mб): " & $size1 & @LF & _
"Файлов(всего): " & $res[1] & @LF & _
"Каталогов(всего): " & $res[2] & @LF & _
"Время выполнения (сек): " & $iDiff)
EndIf
EndFunc
Func Disable()
GUICtrlSetState($iButton, $GUI_DISABLE)
GUICtrlSetState($start, $GUI_DISABLE)
GUICtrlSetState($xlsopen, $GUI_DISABLE)
EndFunc
Func Enable()
GUICtrlSetState($iButton, $GUI_ENABLE)
GUICtrlSetState($start, $GUI_ENABLE)
GUICtrlSetState($xlsopen, $GUI_ENABLE)
EndFunc
Func Excel_($oExcel)
Global $oRange = $oExcel.Application.Sheets(1).Range('A1:C1')
With $oRange
.ColumnWidth = 14 ;ширина столбца
.Font.Bold = True ;жирный шрифт
EndWith
$oExcel.Application.Sheets(1).Range('B1').ColumnWidth = 45
$oRange = $oExcel.Application.Sheets(1).Range('A1:C' & $Folder[0]+2)
With $oRange
.WrapText = True ;Автоперенос в ячейке
.HorizontalAlignment = $xlCenter ;расположение по горизонтали
.VerticalAlignment = $xlCenter ;по вертикали
EndWith
$oExcel.Application.Sheets(1).Range('B3:B' & $Folder[0]+2).HorizontalAlignment = $xlLeft
For $i = 7 To 12
With $oRange.Borders($i)
.LineStyle = 1 ;стиль линии
;~ .Weight = -4138 ;толщина линии
;~ .ColorIndex = 5 ; цвет линии(1 - 56)
EndWith
Next
For $i = 7 To 10
With $oRange.Borders($i)
.Weight = -4138 ;толщина линии
EndWith
Next
$oRange = $oExcel.Application.Sheets(1).Range('A1:C1')
For $i = 7 To 12
With $oRange.Borders($i)
.Weight = -4138 ;толщина линии
EndWith
Next
EndFunc
Источник: autoit-script.ru
Автор(ы): Malderin