пятница, 16 мая 2008 г.

Скрипт для бэкапа файлов на флешку (Windows)


Скрипт для бэкапа файлов на флешку (Windows)

Понадобилось одному пользователю каждое утро с файл сервера бэкапить 2-а файлика на флэшку. Чтобы не делать каждое утро по 10 действий и облегчить человеку жизнь - написал скрипт, который с сетевого диска копирует 2-а файла во временную папку, запаковывает winrar-ом, называет архив сегодняшней датой и кидает на флешку. Если все прошло как надо - пользователь получает уведомление, что архив успешно скопирован или наоборот, получает ошибку! Писалось все в *.BAT-e.

Вот сам скрипт:



@ECHO off
SET FILE1="z:\server\db\file1.doc"
SET FILE2="
z:\server\db\file2.doc"
SET TEMP="c:\TEMP\"
SET RAR="c:\Program Files\WinRAR\WinRAR.exe"
SET NAME=%DATE%
SET FLASHDRIVE="m:\"

if exist %TEMP% rmdir /s /q %TEMP%
mkdir %TEMP%

if exist %FILE1% copy %FILE1% %TEMP%
if exist %FILE2% copy %FILE2% %TEMP%

%RAR% a -ep1 %FLASHDRIVE%\%NAME%.rar %TEMP%

rmdir /s /q %TEMP%

if exist %FLASHDRIVE%\%NAME%.rar @ECHO Succesful!!!
if not exist %FLASHDRIVE%\%NAME%.rar @ECHO ERROR
pause

Что к чему:

@ECHO off - отключаю вывод всех команд
объявляю переменные:
SET FILE1="z:\server\db\file1.doc" - это первый файл который мне нужно скопировать
SET FILE2="z:\server\db\file2.doc" - а это второй
SET TEMP="c:\TEMP\" - временная папка
SET RAR="c:\Program Files\WinRAR\WinRAR.exe" - указываю где находится Winrar
SET NAME=%DATE% - здесь я задаю имя архива. Имя архива = сегодняшняя дата. т.е. каждый день у нового файла будет новое имя
SET FLASHDRIVE="m:\" - объявил флэшку, кстати я ей поменял букву через "Управление компьютером-> Управление дисками". Винда запоминает какую букву вы дали своей флешке и ставит именно ее.

if exist %TEMP% rmdir /s /q %TEMP% - теперь я проверяю, если существует временная папка, тогда нужно удалить её.
Параметр /s удаляет указанный каталог и все подкаталоги вместе с файлами.
Параметр /q удаляет каталоги без запроса подтверждения.

mkdir %TEMP% - создаю временную папку

if exist %FILE1% copy %FILE1% %TEMP% - если существует 1-ый файл - скопировать его в темп
if exist %FILE2% copy %FILE2% %TEMP% - то же самое и со 2-ым файлом

%RAR% a -ep1 %FLASHDRIVE%\%NAME%.rar %TEMP% - архивирую
а - добавить в архив
-ep1 - если не поставить этот ключ, то файлы в архиве, будут еще и в папке с названием temp, это не очень удобно.

rmdir /s /q %TEMP% - и снова я удаляю временную папку - ну чтобы чище было на компе

Далее проверяю, есть ли архив с сегодняшней датой на флешке, если есть показать Succesful, а если нет - сами понимаете - ERROR
if exist %FLASHDRIVE%\%NAME%.rar @ECHO Succesful!!!
if not exist %FLASHDRIVE%\%NAME%.rar @ECHO ERROR

pause - не дает окну закрыться, чтобы пользователь успел прочитать сообщения и предлагает "Press any key".
Где находится кнопка "any key" я до сих пор не знаю.


Если кому-то нужно будет использовать, скопировать скрипт в текстовый документ и сохранить с расширением *.bat

UPDATE:
Справочник по коммандной строке в формате *.CHM можно сделать так:
Правой кнопкой по раб. столу "Создать ярлык" и в открывшееся окно вставить вот это:
%windir%\hh.exe ms-its:%windir%\Help\ntcmds.chm::/ntcmds.ctm

То же самое есть на сайте microsoft.com


3 комментария:

  1. SET NAME=%DATE%
    Кстати возможны проблемы с копированием архива на флешку, если формат даты будет такой:
    11/11/2011

    Слеш нужно заменить на точку или тире:
    11-11-2011

    ОтветитьУдалить
  2. Формат даты меняется в панели управления - региональные настройки.

    ОтветитьУдалить