Архивирование всех подключенных к компьютеру флешек

в 13:20, , рубрики: Песочница, метки:

В один из дней была поставлена задача архивировать все подключенные флешки на специальную флешку с резервными копиями. Поиск по интернетам ничего нужного не дал, поскольку требовалось максимально простое и эффективное решение.

Задача поставлена не совсем обычная — хотелось получить архив с каждой подключенной флешки на архивной флешке при минимальном действии пользователя. Поиск по гуглам привёл в сторону скрипта на VBS и архиватора WinRAR. CMDBAT для данной задачи не подходят, поскольку необходимо работать с файловой системой и списком устройств, что легко позволяет делать VBS. Выбор в сторону WinRAR был сделан из-за того, что он обладает очень широкими настройками через командную строку. Поисковые запросы выдают много примеров и мануалов, где расписаны параметры запуска архиватора и примеры их использования, но все пути там статичны, а флешки иногда могут менять свои пути. Поэтому необходимо получить список съёмных устройств, исключить из него устройства без носителей (например пустой карт-ридер). После того, как получаем коллекцию дисков мы пробегаемся по ней и если съёмный носитель не является архивной флешкой, то архивируем с заданными параметрами в заданное место. По окончании работы скрипта также выводиться информация о количестве архивированных флешек.

После написания скрипт и папка с WinRAR закидываются в корень архивной флешки, устанавливается разрешение только на чтение и выполнение и скрываются от глаз пользователя, а для запуска выводится ярлык.

В конце поста приводится собственно скрипт на VBS и некоторые параметры запуска WinRAR. Скрипт ориентирован на начинающих системных администраторов и небольшие объёмы данных.

Код скрипта
Option Explicit

Const Removable = 1
Dim AN, FN, LN, flag, text, path, Letter
Dim fso, oDrive, curDrive
Dim WshShell
Dim RarPlace, RarName, RarList

flag = 0
Letter = ""
text = ""
path = ""
AN =""
FN = ""
LN = ""

Set fso = wscript.createobject("scripting.FileSystemObject")
Set oDrive = fso.Drives
Set WshShell = CreateObject("WScript.Shell")
AN = WshShell.CurrentDirectory ' Поскольку скрипт лежит в корне, то достаточно получить директорию запуска


For Each curDrive In oDrive ' Получаем коллекцию носителей
	Select Case curDrive.DriveType 
	Case Removable ' Выбираем съёмные устройства и начинаем их проверять
		If curDrive.IsReady Then ' Проверка на наличие носителя в устройстве
			path = curDrive.DriveLetter & ":"
			If (path <> AN) Then
			LN = curDrive.VolumeName
			If Not fso.FolderExists(AN & LN) Then FSO.CreateFolder AN & LN ' Создаём и выбираем место складирования архивов
			RarList = path
			RarName = AN & LN & "" & LN & "-" & ".rar"
			RarPlace = AN & "WinRARWinRAR.exe a -s -r -rr10p -idcdpq -htb -dh -isnd -ed -m3 -idp -agYYYYMMDD" ' Параметры запуска архиватора
			WshShell.Run ( "" & RarPlace & " " & RarName & " " & RarList)
			flag = flag + 1
			Letter = Letter & curDrive.DriveLetter & ":" & VbTab & curDrive.VolumeName & VbCrLf ' Метка и имя тома для вывода информации о заархивированных флешках
			Else
			flag = flag
			End If
		End If
	End Select
Next
' Подсчёт и вывод на экран количества заархивированных флешек с их именем и путём
If (flag = 0) Then
	text = "Флешки для архивации отсутствуют"
	Else If (flag = 1) Then
		text = "Заархивировано:" & VbTab & flag & " флешка"
	Else If (flag < 5 and flag > 0) Then
		text = "Заархивировано:" & VbTab & flag & " флешки"
	Else If (flag >= 5) Then
		text = "Заархивировано:" & VbTab & flag & " флешек"
	End If
	End If
	End If
End If

MsgBox text & VbCrlf & VbCrlf & Letter

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js