none
BATник для архивации данных RRS feed

  • Вопрос

  • Помогите написать batник...

    Надо автоматизировать процесс архивирования:
    Встренный планировшик не подходит, т.к. по разному должен выполнятся архивация.  
    значит задача такая:
    Есть папка 777, которая находится в C:\Base
    при запуске BAT-ника должен архивироватся 777 папка и хранится в папке D:\rezerv. Имя файла желательно чтоб совпал с датой архивацией.

     

    P.S. ОС, на котором должен выполнится BAT файл - WIND XP sp2 Home edition

    22 августа 2008 г. 6:36

Ответы

  • Попробуйте в батнике:

    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"

     

    22 августа 2008 г. 9:15
    Модератор
  • > Для знающего человека понятен, о чем идет речь.
    Это когда внятно спрашивают.

    >
    имеется еще папка 555, которая тоже находится в C:\Base и надо, чтоб при запуске батника он тоже бэкапился в папку D:\rezerv\555

    как будет выглядеть тогда сценарий ?


    Просто еще одна команда. 555 тоже должна иметь дату для архива?


    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    22 августа 2008 г. 12:36
  •  Krec написано:

     

    Vadims Podans

     

    Ну да, ясное дело, что лучше локально копировать.. но мне надо автоматизировать этот процесс.

    За этим компом, где надо бекапить данные - сидят всякие девушки, aka Глав.Бух. и я уверен, что они не будут ручную копировать локальные данные в сеть !! по этому надо и это автоматизировать и желательно все "повестить" в одном BAT_нике.

    Ну так автоматизируйте всё в одном батнике. Не вижу проблемы:

    Code Snippet

    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    if exist D:\rezerv\%date%.bkf. (xcopy D:\rezerv\%date%.bkf \\192.168.1.5\rezerv\%date%.bkf. /v /r /o /-y )

    if exist D:\rezerv\555\%date%.bkf. (xcopy D:\rezerv\555\%date%.bkf \\192.168.1.5\rezerv\555\%date%.bkf. /v /r /o /-y)

     

     

    этим методом вы решаете 2 задачи:

    1)если по каким-то причинам отсутствует сеть или во время копирования у вас будут проблемы с сетью, то хотя бы одна копия бэкапа у вас уже будет! Если копировать сразу в сеть, то при сбое в сети у вас ничего не будет.

    2)избавляетесь от фрагментации при копировании в сеть (правда, локально сохранится). Дело в том, что при архивировании сразу в сеть итоговый размер файла неизвестен, поэтому на сервере будут выделяться произвольные участки места из-за чего будет катастрофически будет расти фрагментация. Если копировать сначала локально, а потом в сеть, то размер архива известен и сервер будет по возможности выделять целые участки места.

    Если же после бакупа локальные копии не нужны, то делается так:

    Code Snippet

    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    if exist D:\rezerv\%date%.bkf. (xcopy D:\rezerv\%date%.bkf \\192.168.1.5\rezerv\%date%.bkf. /v /r /o /-y

    If exist \\192.168.1.5\rezerv\%date%.bkf. (del D:\rezerv\%date%.bkf. /f /q))

    if exist D:\rezerv\555\%date%.bkf. (xcopy D:\rezerv\555\%date%.bkf \\192.168.1.5\rezerv\555\%date%.bkf. /v /r /o /-y

    If exist \\192.168.1.5\rezerv\555\%date%.bkf. (del D:\rezerv\555\%date%.bkf. /f /q))

    В данном случае делается архив локально. Далее проверяется, что он сделан (условно, т.к. наличие файла архива ещё не означает, что архив создан правильно) и если это так, то копируется в сеть. После проверяется, что архив успешно скопирован в сеть (опять же условно, т.к. при кратковременном обрыве сети копирование прекратится, но на сервере будет кусок архива с именем) и если это так, то удаляется локальная копия.

     

    з.ы. если посмотреть мою подпись, то можно сделать вывод, что я что-то смыслю в бакупах не по наслышке 

    25 августа 2008 г. 11:36

Все ответы

  •  

    На PowerShell подойдет?
    22 августа 2008 г. 7:26
  • Думаю нет, т.к. мне надо это сценарие выполнить на WIND XP sp2 Home

    22 августа 2008 г. 8:16
  • Какой архиватор наверное надо догадаться, любой имеет встроенную справку...
    И совсем не ясно по поводу планировщика.
    22 августа 2008 г. 8:31
  • какой архиватор? я про архиватора ничего не написал. мне BACKUP надо делать !!!

    А насчет планировшика - забудьте !

    Мне надо с определенного места бэкапить файлы в другую папку.

     

    22 августа 2008 г. 9:07
  • Попробуйте в батнике:

    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"

     

    22 августа 2008 г. 9:15
    Модератор
  • Спасибо! это то, что мне надо !

    22 августа 2008 г. 9:45
  • Вот и пойми тут...

    > "Надо автоматизировать процесс архивирования:"
       > какой архиватор? я про архиватора ничего не написал. мне BACKUP надо делать !!!


    >
    Встренный планировшик не подходит, т.к. по разному должен выполнятся архивация.
       > А насчет планировшика - забудьте !


    "...ну там еще дом с пальмой" (ц)

    22 августа 2008 г. 10:30
  •  Dmitry Alifatov

     

    А можно 2 процесс совмешать? т.е.

    Есть папка 777, которая находится в C:\Base
    при запуске BAT-ника должен архивироватся 777 папка и хранится в папке D:\rezerv. Имя файла желательно чтоб совпал с датой архивацией.

    имеется еще папка 555, которая тоже находится в C:\Base и надо, чтоб при запуске батника он тоже бэкапился в папку D:\rezerv\555

    как будет выглядеть тогда сценарий ?

     

    01MDM

     

    Для знающего человека понятен, о чем идет речь.

    ----------

     

     

    22 августа 2008 г. 12:00
  • > Для знающего человека понятен, о чем идет речь.
    Это когда внятно спрашивают.

    >
    имеется еще папка 555, которая тоже находится в C:\Base и надо, чтоб при запуске батника он тоже бэкапился в папку D:\rezerv\555

    как будет выглядеть тогда сценарий ?


    Просто еще одна команда. 555 тоже должна иметь дату для архива?


    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    22 августа 2008 г. 12:36
  •  

    Народ, а можно место локального адреса писать сетевой адрес?

    т.е. хочу БЭКАП хранить в другом компе, по адресу 192.168.1.5 (есть там расшаренная папка rezerv). можно так:?!

     

    @echo off
    ntbackup backup "C:\Base\777"  /f "\\192.168.1.5\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f \\192.168.1.5\rezerv\555\%date%.bkf"


    25 августа 2008 г. 8:00
  •  

    Krec

    можно, но не нужно. Сначала нужно выполнить копию локально, а потом эту копию копировать в сеть.

    25 августа 2008 г. 8:04
  •  

    Vadims Podans

     

    Ну да, ясное дело, что лучше локально копировать.. но мне надо автоматизировать этот процесс.

    За этим компом, где надо бекапить данные - сидят всякие девушки, aka Глав.Бух. и я уверен, что они не будут ручную копировать локальные данные в сеть !! по этому надо и это автоматизировать и желательно все "повестить" в одном BAT_нике.

    25 августа 2008 г. 10:42
  •  Krec написано:

     

    Vadims Podans

     

    Ну да, ясное дело, что лучше локально копировать.. но мне надо автоматизировать этот процесс.

    За этим компом, где надо бекапить данные - сидят всякие девушки, aka Глав.Бух. и я уверен, что они не будут ручную копировать локальные данные в сеть !! по этому надо и это автоматизировать и желательно все "повестить" в одном BAT_нике.

    Ну так автоматизируйте всё в одном батнике. Не вижу проблемы:

    Code Snippet

    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    if exist D:\rezerv\%date%.bkf. (xcopy D:\rezerv\%date%.bkf \\192.168.1.5\rezerv\%date%.bkf. /v /r /o /-y )

    if exist D:\rezerv\555\%date%.bkf. (xcopy D:\rezerv\555\%date%.bkf \\192.168.1.5\rezerv\555\%date%.bkf. /v /r /o /-y)

     

     

    этим методом вы решаете 2 задачи:

    1)если по каким-то причинам отсутствует сеть или во время копирования у вас будут проблемы с сетью, то хотя бы одна копия бэкапа у вас уже будет! Если копировать сразу в сеть, то при сбое в сети у вас ничего не будет.

    2)избавляетесь от фрагментации при копировании в сеть (правда, локально сохранится). Дело в том, что при архивировании сразу в сеть итоговый размер файла неизвестен, поэтому на сервере будут выделяться произвольные участки места из-за чего будет катастрофически будет расти фрагментация. Если копировать сначала локально, а потом в сеть, то размер архива известен и сервер будет по возможности выделять целые участки места.

    Если же после бакупа локальные копии не нужны, то делается так:

    Code Snippet

    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    if exist D:\rezerv\%date%.bkf. (xcopy D:\rezerv\%date%.bkf \\192.168.1.5\rezerv\%date%.bkf. /v /r /o /-y

    If exist \\192.168.1.5\rezerv\%date%.bkf. (del D:\rezerv\%date%.bkf. /f /q))

    if exist D:\rezerv\555\%date%.bkf. (xcopy D:\rezerv\555\%date%.bkf \\192.168.1.5\rezerv\555\%date%.bkf. /v /r /o /-y

    If exist \\192.168.1.5\rezerv\555\%date%.bkf. (del D:\rezerv\555\%date%.bkf. /f /q))

    В данном случае делается архив локально. Далее проверяется, что он сделан (условно, т.к. наличие файла архива ещё не означает, что архив создан правильно) и если это так, то копируется в сеть. После проверяется, что архив успешно скопирован в сеть (опять же условно, т.к. при кратковременном обрыве сети копирование прекратится, но на сервере будет кусок архива с именем) и если это так, то удаляется локальная копия.

     

    з.ы. если посмотреть мою подпись, то можно сделать вывод, что я что-то смыслю в бакупах не по наслышке 

    25 августа 2008 г. 11:36
  •  

      Vadims Podans

     

    Спасибо, все гениально и так, как надо ! вот вечером тестировал и все ОК ! только один момент мне не понравилась... когда уже выполняется 2-я часть скрипта, т.е. когда пытается отправить по сети файлы бекапа, то в командном строке спрашивает типа: Что значит файл [локальный путь к файлу]/имя файла, если это файл, то нажмите F, если это каталог, то набмите D

    Как делать так, чтоб он автоматом выполнился с ключем F ? а то не удобно каждый раз ждать, пока дойдет до этого и нажать F

     

    P.S. И вообше интересно, что за оператор @echo off ? Вроде и без него работает... Это лично в моих интересах Smile

    25 августа 2008 г. 16:39
  •  Krec написано:

     

      Vadims Podans

     

    Спасибо, все гениально и так, как надо ! вот вечером тестировал и все ОК ! только один момент мне не понравилась... когда уже выполняется 2-я часть скрипта, т.е. когда пытается отправить по сети файлы бекапа, то в командном строке спрашивает типа: Что значит файл [локальный путь к файлу]/имя файла, если это файл, то нажмите F, если это каталог, то набмите D

    Как делать так, чтоб он автоматом выполнился с ключем F ? а то не удобно каждый раз ждать, пока дойдет до этого и нажать F

     

    P.S. И вообше интересно, что за оператор @echo off ? Вроде и без него работает... Это лично в моих интересах

    @echo on - включает вывод исполняемых команд на экран

    @echo off - отключает вывод исполняемых команд на экран

    т.е. самих команд вы не видите, только результат их выполнения.

     

    Что касается вопроса при копировании, то скорее всего вам нужно попробовать сделать вот так:

    Code Snippet

    @echo off
    ntbackup backup "C:\Base\777"  /f "D:\rezerv\%date%.bkf"
    ntbackup backup "C:\Base\555"  /f "D:\rezerv\555\%date%.bkf"
    if exist D:\rezerv\%date%.bkf. (xcopy D:\rezerv\%date%.bkf \\192.168.1.5\rezerv. /v /-y

    If exist \\192.168.1.5\rezerv\%date%.bkf. (del D:\rezerv\%date%.bkf. /f /q))

    if exist D:\rezerv\555\%date%.bkf. (xcopy D:\rezerv\555\%date%.bkf \\192.168.1.5\rezerv\555. /v /-y

    If exist \\192.168.1.5\rezerv\555\%date%.bkf. (del D:\rezerv\555\%date%.bkf. /f /q))

    Полагаю, что при таком варианте ничего не должен спрашивать.

     

    з.ы. сейчас уже не помню как там точно было, но не лишним будет создание заранее необходимых папок в пути назначения. Т.е. чтобы весь путь уже существовал.

    25 августа 2008 г. 17:08
  • xcopy D:\rezerv\%date%.bkf  \\192.168.1.5\rezerv\ /v /-y

    При копировании с помощью xcopy можно путь к конечной папке завершать слешем "\"
    Тогда xcopy не будет интересоваться и если этой папки не существует создаст её. 
    25 августа 2008 г. 17:36
  •  01MDM написано:
    xcopy D:\rezerv\%date%.bkf  \\192.168.1.5\rezerv\ /v /-y 

    а вот и не уверен. Сейчас откопал несколько своих старых скриптов на cmd и там нету завершающего слеша, при этом точно помню, что ничего не спрашивалось и всё копировалось. Если мой вариант не сработает, то можно попробовать со слешем.

    25 августа 2008 г. 17:40
  • А что тут быть или не быть уверенным?
    Просто попробуйте:

    cd.>1.txt && xcopy 1.txt 1\
    25 августа 2008 г. 19:15
  • 01MDM

    У меня копируется как со слешем, так и без и без запросов. Так что оба варианта верны.

    25 августа 2008 г. 19:20
  •  

    Я так понял, что в этом случае без запроса будет копироватся папка, да? т.е. функция D !

    А мне надо чтоб файл только передавался, т.е. выполнился F.

    В удаленном компе все нормлаьно, там создается папки, просто если с локального передать папку, то уже дубликатов папок будет, и все будет каскадно....

    26 августа 2008 г. 6:07
  •  

    Нет, будет копироваться сам файл. Дубликатов быть не должно. Можете для экспресс-проверки запустить только последнюю часть батника и проверить интерактивно.
    26 августа 2008 г. 6:24
  •  

    так мне брать ваш последний скрипт ? там уже правлен ?

    это мне надо тестировать в другом компе. как пробую - о результате опишусь Wink

    26 августа 2008 г. 6:31
  • да, последний.

     

    26 августа 2008 г. 6:32