VBS скрипт для резервного архивирования
Доброго вечера.
Озадачился тут резервным копированием данных у клиента, ну и конечно очистка хранилища от старых бэкапов. Тема в принципе замылиная, но сторонний софт я не люблю для этого использовать, а 7zip как то на сервере не прижился. Вот и утопал в поисках прекрасного скрипта для данного мероприятия. Покопавшись в сети нашёл интересную статейку, но в том скрипте не хватало части функционала, а многие найденные были слишком громозкими, а во многих почему то были допущены детские ошибки(подозреваю что нарочно, правда не понятно зачем).
Собственно тело vbs скрипта, универсилизировал как смог:
Соответственно можно задавать параметры в теле скрипта непременным, либо аргументами при запуске вида:
cscript zip.vbs C:\Путь-какую-папку-архивировать\ С:\Путь-куда-архивировать\ Название-файла.zip Срокжизнифайлов
И конечно не забываем про пробелы.
Не забываем раскоментировать нужный блок и закоментировать не нужный.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Это «Песочница» — раздел, в который попадают дебютные посты пользователей, желающих стать полноправными участниками сообщества.
Если у вас есть приглашение, отправьте его автору понравившейся публикации — тогда её смогут прочитать и обсудить все остальные пользователи Хабра.
Чтобы исключить предвзятость при оценке, все публикации анонимны, псевдонимы показываются случайным образом.
Не надо пропускать:
- рекламные и PR-публикации
- вопросы и просьбы (для них есть Хабр Q&A);
- вакансии (используйте Хабр Карьеру)
- статьи, ранее опубликованные на других сайтах;
- статьи без правильно расставленных знаков препинания, со смайликами, с обилием восклицательных знаков, неоправданным выделением слов и предложений и другим неуместным форматированием текста;
- жалобы на компании и предоставляемые услуги;
- низкокачественные переводы;
- куски программного кода без пояснений;
- односложные статьи;
- статьи, слабо относящиеся к или не относящиеся к ней вовсе.
CMD/BAT, резервное копирование и глубина архивации
Наиболее доступный инструмент для резервного копирования — командная строка. Найти более-менее приличную реализацию резервного копирования в Windows-системах средствами CMD/BAT-файлов можно, воспользовавшись любым поисковиком. Однако часто нет необходимости накапливать и хранить все созданные архивы, достаточно лишь нескольких самых последних. В этом случае необходима реализация резервного копирования с поддержкой глубины архивации. Найти реализацию поддержки глубины архивации в таких скриптах уже гораздо сложнее.
Вашему вниманию — относительно простой скрипт (CMD-сценарий), реализующий резервное копирование с заданной глубиной архивации.
Скрипт предназначен для создания резервных копий путем упаковки в архив содержимого произвольного каталога. Помимо собственно поддержки глубины архивации в скрипте раеализовано сохранение новых резервных копий в каталоги, имена которых формируются на основе даты/времени резервирования. При выполнении архивации RAR будет пытаться открывать также совместно используемые файлы (бывает полезно, чтобы не заставлять пользователей обязательно выйти из программы; например, при резервировании файловых баз 1С). Удобнее всего использовать такой подход к резервированию данных, если прописать запуск скрипта в планировщик.
Поскольку используется консольная версия архиватора RAR, необходимо, чтобы для скрипта был доступен RAR.exe. Для новых локализованных версий архиватора помимо файла RAR.exe также желательно наличие файла RarLng.dll, а для зарегистрированных пользователей — еще и файла rarreg.key. Для обеспечения доступности можно, например, просто положить все нужные файлы в рабочий каталог скрипта.
Под глубиной архивации здесь подразумевается не промежуток времени, за который хранятся архивы, а количество последних хранимых архивов. При использовании интервала резервирования в 1 день (сутки) глубина резервирования в днях будет совпадать с количеством хранимых архивов.
В переменных, содержащих пути к файлам/каталогам, можно использовать и абсолютные, и относительные пути, а также пробелы.
В примере содержится только один блок непосредственного создания резервной копии (расположен после соответствующего комментария). Можно добавить несколько таких блоков один за другим, например, скопипастив имеющийся блок и изменив значения переменных SrcData и ArcName.
Резервные копии раскладываются в каталоги, имена которых содержат дату и время выполнения резервирования в следующем порядке: год, месяц, дата, часы, минуты, секунды, сотые доли секунды (справедливо для русских региональных настроек). Это необходимо для того, чтобы алфавитная сортировка списка резервных копий совпадала с сортировкой по дате/времени создания копий (то есть просто для удобства работы с копиями). В случае использования региональных настроек, в которых порядок следования элементов даты другой, для получения аналогичного эффекта необходимо изменить порядок токенов %%a-%%g в команде
Проверка существования каталога с резервной копией перед его созданием нужна, если вдруг захочется из имени каталога убрать «лишнее» (например, сотые доли секунд) и запускать скрипт чаще, чем позволяет такое имя. В этом случае ошибки при выполнении не будет, но RAR честно перезапишет уже имеющиеся в каталоге архивы.
«Родная» кодировка для CMD-сценариев — OEM (866), а для Windows-версии архиватора RAR — ANSI (Windows-1251). В связи с этим лог-файл грешит некоторой неудобочитаемостью, если сценарий сохранить в родной для него OEM-кодировке. С одной строны, для себя я счел этот недостаток некритичным (в редакторе/просмотрщике Far Manager не трудно нажать F8 для смены кодировки), а с другой стороны ничто не мешает сохранить сценарий в кодировке ANSI (вывод в консоль командами ECHO в сценарии не используется — только в лог-файл, — поэтому пользователь никаких кракозяблов не увидит, зато лог будет нормально записываться в одной и той же кодировке). Буду благодарен, если предложите более корректный способ «подружить» эти кодировки.
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.
Написать скрипт для архивирования всего содержимого заданной папки, кроме файлов с расширением .TXT
Удалить из папки все файлы с расширением .txt, кроме одного
Собсна дамы и господа! Необходимло удалить из папки все файлы с расширением .txt, кроме одного — и.
Копирование из текущего каталога всех файлов с расширением .txt, кроме одного указанного, в указанный каталог
Очень нужна помощь в написании бат файла или даже в исправлении. ниже задание и код,но нужно чтобы.
Копирование всех файлов с заданным расширением из одной заданной папки в другую заданную папку
Создайте командный файл, который копирует все файлы с расширением, заданным в качестве первого.
Написать bat-файл, выдающий содержимое файлов с расширением txt из текущего каталога на устройстве с: на экран
в) Написать bat-файл, выдающий содержимое файлов с расширением txt из текущего каталога на.
В этом и прикол, что нужен cmd.
1. Перед именем архива добавьте папку назначения.
2. Ключ -x*.txt исключает из архивируемых файлов все файлы с расщирением .txt
1. Команда rar a путь\имя_архива добавляет все файлы из текущей папки в архив «имя_архива», расположенный по пути «путь»
2. По умолчанию добавляются только файлы из текущей папки.
Решение
Пример моего бат файла для архивации:
проверяет наличие созданного файла backup*, если его нет, создает текстовый файл error!.txt c датой ошибки и прекращает дальнейшее выполнение файла.
Дальнейший код вычисляет дату которая была SET /A T_DAY=%T_DAY%-14 дней назад (в данном случае 14) и удаляет папку с архивом 3-ех недельной давности, то есть всегда хранится несколько копий за разные даты. Засовываешь батник в «планировщик» и получаешь надежную систему архивации.
Надеюсь пригодится
Хорошо, но приведенный пример нормально работать не будет.
Косяк с местом сохранения и проверкой существования архива.
После редакции получилось так:
Тематические курсы и обучение профессиям онлайн Профессия Cпециалист по кибербезопасности (Skillbox) DevOps-инженер (Нетология) Профессия DevOps-инженер PRO (Skillbox) |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Bat-ник для удаления %userprofile%\AppData\Roaming\1C\ кроме файлов с расширением .pfl
Коллеги, доброго времени суток. Имеется bat-ник rd /q /s.
Скрипт архивирования файлов за прошлый месяц
Пишу скрипт для архивирования файлов с датой прошлого месяца, архив должен помещаться в отдельную.
Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот.
Копирование TXT-файлов из одной папки и BMP-файлов из другой папки в папку, в которой находится пакетный файл
Доброго времени суток. У кого есть возможность сообразить какой код мне нужет чтобы сделать вот.
Написать скрипт, который читает все файлы из заданной папки
Помогите кто-нибудь с заданием по практике. Нужно написать скрипты на VBScript 1. Написать скрипт.
Для всех файлов из папки с одинаковым расширением, вызвать свой созданный метод
Здравствуйте! Как можно для всех файлов из папки с одинаковым расширением к примеру .csv, вызвать.
Архивация папок
Архивация вложенных папок
Уважаемые знатоки, помогите решить проблему. Есть файлы, которые требуется заархивировать WinRar.
Архивация выбранных папок+файлов в текущей директории
добрый день, понадобилось собирать zip-архив с нужными папками в текущей директории с помощью.
Архивация папок с сохранением имени 7zip, winrar. Батник
С новым годом! Есть папка C:\test1. В ней будут появляться папки с разными названиями (к примеру.
txt файл с именами папок внутри самих папок (в кодировке 1251)
Добрый вечер ) Есть несколько сотен папок, в каждой из которых нужно создать файл album.txt в.
Решение
Решение
Нет-нет, до exe ни в коем случае не нужно, это же к %Path% будет добавляться. Просто директорию, где он установлен указать.
Попробуйте перед «7z a «%ArchPath. » добавить Echo и посмотреть на то, какая команда архиватору формируется. Вот так:
я сначала не дописывал, та же самая ошибка была, дописал — ничего не изменилось.
Да, 7z запускается, но результата нет
вот так. но ничего снова нет.
Добавлено через 5 минут
Тематические курсы и обучение профессиям онлайн Профессия Cпециалист по кибербезопасности (Skillbox) DevOps-инженер (Нетология) Профессия DevOps-инженер PRO (Skillbox) |
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Поиск по папок по маске и перемещение найденных папок в другие папки
Добрый день, у меня возникла проблема, прошу помочь в написании батника. Есть основная папка в.
Получить список папок и вложенных папок, отсортированных по размеру
Как можно получить список папок и вложенных папок, отсортированных по размеру
Иконки папок, батник на изменение группы папок
Здравстуйте 🙂 Начну издалека. Имеется значит у меня набор портативных программок на все случаи.
Архивация на лету
Возможно ли средствами windows (желательно CMD/BAT, но не обязательно) архивировать создаваемый.
Простая автоматизация резервного копирования под Windows
Вопрос резервного копирования волнует каждого специалиста, ответственного за сохранность вверенных ему бесценных служебных документов/баз данных/иных файлов. Для того, чтобы чувствовать себя более уверенно перед лицом различных вероятных форс-мажоров, необходимо периодически выполнять резервное копирование критически важных данных. Не менее актуальна проблема сохранения нажитого непосильным трудом и для домашних пользователей.
Вашему вниманию предлагается простой, но эффективный скриптик, помогающий решать данную проблему.
Имеем исходные условия:
Операционная система: MS Windows XP, 2003 и т.п.;
Объекты резервирования: Папки и файлы, находящиеся на локальных и сетевых дисках в объеме
200 ГБ;
Бюджет: 0 руб.;
Количество специально-обученных сотрудников для настройки процесса: 1 чел.
Количество специально-обученных сотрудников для обслуживания процесса: 0 чел.
Задача: ежедневное полное резервное копирование данных, хранение заданного количества созданных бэкапов без участия оператора.
На просторах Сети можно найти довольно большое количество различных программ решающих подобную задачу. Согласно задачи и поставленных условий были найдены, установлены и протестированы в условиях приближенных к боевым следующие программы: Cobian Backup (9, 10), Toucan, Areca, FBackup, Backup2Net и программа резервного копирования Samsung Auto Backup (идет в комплекте с одноименным съемным диском).
Тестирование данных программ на рабочих объемах данных показало их устойчивую неспособность справиться с простой задачей автоматического создания ежедневных бэкапов данных требуемого объема. Проблемы возникали как на этапе подготовки к выполнению резервирования, так и собственно в прогрессе оного.
Дольше всех (около недели) продержался Cobian Backup 10, после чего пошел в отказную и упорно начал делать бэкапы только около 600 МБ данных и сваливаясь с кучей ошибок в логах. Манипуляции с настройками теневого копирования и архивирования ни к чему, к сожалению не привели, а так в целом программа оставила довольно приятное впечатление, так что к применению рекомендуется (при условии стабильной работы в Ваших конкретных условиях).
Особая надежда была на Toucan, так как программа относится к СПО. Но увы, надежды не оправдались. По ходу выполнения задания на разных этапах программа вываливалась с классической ошибкой о недопустимой операции и необходимости ее (программы) закрытия.
Остальные участники отбора так же не устроили меня по различным причинам. Подробнее раскрывать процесс тестирования указанных программ не вижу особого смысла, т.к. к цели написания данной статьи, это напрямую не относится.
Таким образом, простая идея с поиском свободного решения поставленной задачи оказалась с треском провалена. Так как бродить далее по просторам Сети на предмет бесплатных для коммерческого применения программ резервного копирования уже не было ни сил, ни желания, ни надежды, а бэкапы делать крайне необходимо, то возникло естественное решение/желание соорудить что-то собственное. Результатом раздумий в течении довольно непродолжительного времени стало предлагаемое ниже решение простой автоматизации резервирования данных посредством обыкновенного bat-скрипта и стандартного планировщика. Скрипт работает, что называется, «из коробки», и не требует дополнительного тестирования и отладки, требуется только предоставить ему входные данные и заранее создать участвующие в процессе каталоги (проверок на этот предмет из соображений простоты нет).
Предвидя недовольство многих по поводу выкладывания готовых к употреблению решений, хочу сказать, что не у многих наших сограждан есть желание/время/возможность/талант/вписать нужное, для того чтобы разбираться с синтаксисом стандартной командной строки Windows. Также посмею указать на вероятность отличную от нуля, что хотя бы несколько юных и зеленых администраторов обратят свой взор на несомненную бесполезность изучения данной области.
И так, приступим. Сначала приведу полный текст скрипта без комментариев. Полный разбор с комментариями см. ниже.
@Echo Off
echo %date% %time% ***Start***
SetLocal EnableDelayedExpansion
Set $SRC=list_add.txt
Set $EXC=list_excl.txt
Set $DST=D:\backups
Set $PSW=password
Set $COMPR=1
Set $COPIES=7
C:\»Program Files»\7-Zip\7z.exe a -t7z -mhe=on «%$DST%\files%DATE:
6,2%.7z» @%$SRC% -scsWIN -p%$PSW% -mx=%$COMPR% -ssw -xr@%$EXC% >> log_7z.log
For /F «Delims=» %%i In (‘DIR /B/O:-N %$DST%\files. -??-??_??-??-. 7z’) Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL «%$DST%\%%i»
)
echo %date% %time% ***End***
Результатом ежедневной работы скрипта будет набор бэкапов нужных Вам данных, имеющий приблизительно такой вид:
dir d:\backups\
files2010-07-12_22-00-00.7z
files2010-07-13_22-00-00.7z
files2010-07-14_22-00-00.7z
files2010-07-15_22-00-00.7z
files2010-07-16_22-00-00.7z
Обещанный разбор с комментариями.
@Echo Off :: Отключение вывода текста скрипта
echo %date% %time% ***Start*** ::Вывод даты и времени старта скрипта
SetLocal EnableDelayedExpansion :: Команда изменяет работу с переменными в цикле.
В обычном случае, чтобы определить значение переменной окружения, надо воспользоваться конструкцией %переменная%. Однако, если значение переменной меняется внутри цикла и читается там же, то для корректной работы бат-файла, следует использовать команду SetLocal EnableDelayedExpansion и вместо символа «%», использовать символ «!». Иначе, значение переменной в цикле будет всегда одним и тем же — таким, каким было до входа в цикл.
Далее для успешной работы предлагаемого скрипта необходимо задать следущие входные параметры (переменные):
$SRC=list_add.txt ::файл-список архивируемых данных
$EXC=list_excl.txt ::файл-список исключаемых файлов
$DST=D:\backups ::место хранения резервных копий
$PSW=password ::секретный пароль шифрования архива
$COMPR=1 ::степень сжатия данных архиватором 7zip (1=самое быстрое архивирование, 5=нормальное сжатие, 9=ультра-сжатие, 0=архивация без сжатия)
$COPIES=7 ::количество хранимых резервных копий
Следующая строка запускает архивацию посредством 7-Zip файлов и папок перечисленных в файле list_add.txt, кроме файлов, указанных в файле исключений list_excl.txt
C:\»Program Files»\7-Zip\7z.exe a -t7z -mhe=on «%$DST%\files%DATE:
6,2%.7z» @%$SRC% -scsWIN -p%$PSW% -mx=%$COMPR% -ssw -xr@%$EXC% >> log_7z.log
Разберем эту строку подробнее:
C:\«Program Files»\7-Zip\7z.exe :: Указывает место расположения исполняемого файла архиватора 7-Zip (точнее его консольной версии);
a :: это команда добавления файлов/папок в архив;
-t7z :: ключ задает тип создаваемого архива = 7z;
-mhe=on :: включает шифрование паролем заголовка архива и имен файлов/папок в архиве;
6,2%.7z
Команда динамически формируем полный путь и имя файла архива вида «D:\backups\files2010-07-12_22-00-00.7z», где в имени присутствуют дата и время архивации;
@%$SRC% :: задает имя файла-списка архивируемых данных, вместо %$SRC% скрипт подставляет имя файла;
-scsWIN :: задает кодировку win для файла-списка;
-p%$PSW% :: ключ задает пароль для шифрования архива, вместо %$PSW% скрипт подставляет текстовую строку пароля;
-mx=%$COMPR% :: ключ задает степень сжатия архивируемых данных;
-ssw :: ключ разрешает архивацию файлов открытых приложениями на запись;
-xr@%$EXC% :: задает имя файла-списка данных, исключаемых из процесса архивации, r = означает, что надо исключать и подпапки, вместо %$EXC% скрипт подставляет имя файла;
>> log_7z.log :: символы >> обозначают перенаправление сообщений выводимых всей строкой с экрана (стандартного потока) в файл log_7z.log, это удобно для последущего анализа работы скрипта;
Эта часть скрипта отвечает за автоматическое удаление уже ненужных архивов данных, в соответствии с количеством заданым переменной $COPIES.
For /F «Delims=» %%i In (‘DIR /B/O:-N %$DST%\files. -??-??_??-??-. 7z’) Do (
Set /A $COPIES-=1
If !$COPIES! LSS 0 DEL «%$DST%\%%i»
)
Разберем подробнее. Автоматическое удаление реализуется путем организации цикла, в ходе которого перебирается набор имен (множество) файлов архивов (как оно формируется — см. чуть ниже строку DIR. )
В общем виде наш цикл имеет вид: for /F [«КлючевыеСловаРазбора»] <%% | %>переменная in (МножествоИменФайлов) do команда [ПараметрыКоманднойСтроки]
Ключ /F определяет, что цикл произведет разбор всех элементов множества «МножествоИменФайлов»;
«КлючевыеСловаРазбора» — указывают какие разделители используются между элементами разбираемого множества, в нашем случае — разделителя нет;
%%i — переменная i, которая содержит в каждый шаг итерации текущий элемент разбираемого множества (т.е. очередное имя файла в нашем случае).
Команда формирует набор (множество) имен файлов, содержащихся в папке заданной переменной $DST и соответствующих маске files. -??-??_??-??-. 7z, где знак вопроса обозначает любой символ в данной позиции; ключ /B задает вывод только имен файлов, а ключ /O:-N задает сортировку по имени (N) или в обратном порядке (-N), в нашем случае — порядок обратный.
Набор имеет вид:
files2010-07-01_22-00-00.7z
files2010-06-30_22-00-00.7z
files2010-06-29_22-00-00.7z
Обратите внимание на порядок сортировки элементов!
Do (. ) — в скобках содержится команда(ы), выполняемые в каждой итерации, в нашем случае:
Set /A $COPIES-=1 :: декремент переменной COPIES, выполняющей роль счетчика цикла;
If !$COPIES! LSS 0 DEL «%$DST%\%%i» :: команда проверяет условие $COPIES LSS 0 т.е. $COPIES echo %date% %time% ***End*** ::Вывод даты и времени окончания работы скрипта
Также приведу, для примера, содержимое файла-списка list_add.txt:
M:\mail
U:\updates
Z:\Бухгалтерия
Z:\Отдел*
z:\Справка
Z:\Сисадмин
И файла исключений list_excl.txt:
Собственно вот весь расклад. Скриптик маленький, но надежно работающий. Хитростей никаких нет, все достаточно просто.
Да и напоследок банальность… Для автоматизации запуска можно использовать стандартный планировщик Windows, командной строкой вида «d:\backup\backup.bat >> d:\backup\backup.log». Это позволит вывести сообщения скрипта в лог-файл.
Всем удачи.
2) Подробная справка по функциям консольной версии 7-Zip прилагается к архиватору.