Давеча читал у GlumShadow про бэкапы и бесплатную comodo. Я так понимаю, софтина просто делает резервную копию из одного указанного каталога в другой. Нет, я согласен, что это нужная и полезная фича. Но зачем? Зачем ради этого ставить лишний софт?
Я для себя этот вопрос решил… Правильно, батником)))
Как это делается?
Создаём в любом каталоге текстовый документ и вставляем в него строку:
xcopy C:\My_Doc \\Alexey\dmitryan\ /c /i /v /s /e /h /g /d /y /z >>lastcopy.log
Чуть попозже я объясню, что означает каждая буковка. Пока просто вставляем и не ломаем голову.
Сохраняем, закрываем и переименовываем в backup.bat, например.
Ну, и подвешиваем запуск батника в, предположим, стандартный планировщик в винде. У меня этот вариант не прошёл (на работе), потому как каждые два месяца приходится менять пароль на компе и планировщик начинает возмущаться.
Поэтому я пошёл иным путём. Давным давно пользуюсь менеджером закачек Download Master, в котором есть встроенный планировщик. Этот самый планировщик позволяет в том числе и запускать внешние программы. Вот туда я свой батник и подвесил. Впрочем, проблему планировщика каждый может решить своими методами.
А теперь давайте разберём эту таинственную строку, которую мы записали в батник:
xcopy C:\My_Doc \\Alexey\dmitryan\ /c /i /v /s /e /h /g /d /y /z >>lastcopy.log
Xcopy — стандартная команда командной строки. Копирует файлы и каталоги, включая подкаталоги.
C:\My_Doc — путь к каталогу источнику (папка, для которой мы будем делать резервную копию).
\\Alexey\dmitryan\ — путь к каталогу-приёмнику (папка, в которую мы будем делать резервную копию). Как видите, я сохрани даже не на свой винчестер, а по локальной сети.
Далее идут ключи к команде xcopy:
- /c — ключ, позволяющий игнорировать ошибки. Т.е. в обычном режиме при возникновении ошибки выполнение команды м.б. (при)остановлено. С этим ключом — будет продолжено выполнение коменды;
- /i — Если источником является каталог или источник содержит подстановочные знаки и результат не существует, команда xcopy считает, что результат — это имя каталога, и создает новый каталог. Затем xcopy копирует все указанные файлы в новый каталог. По умолчанию команда xcopy запрашивает подтверждение, является ли параметр результат каталогом или файлом;
- /v — Проверяет каждый скопированный файл на соответствие его оригиналу;
- /s — ключ для копирования НЕ пустых каталогов и подкаталогов;
- /e — ключ для копирования и пустых каталогов тоже (работает в паре с предыдущим ключом);
- /h — Копирует системные и скрытые файлы. По умолчанию команда xcopy не копирует системные и скрытые файлы;
- /g — Создает незашифрованные файлы-результаты;
- /d[:мм-дд-гггг] — Копирует только файлы, измененные не ранее заданной даты. Если не включить значение мм-дд-гггг, команда xcopy копирует все файлы-источники, которые новее существующих файлов-результатов. Эта возможность позволяет обновлять только измененные файлы;
- /y — Устраняет выдачу запроса на подтверждение перезаписи существующего конечного файла. Т.е. при копировании тысячи файлов, вас не будут тысячу раз спрашивать, хотите ли перезаписать файл, а просто их перезапишут;
- /z — Копирует по сети в режиме перезапуска. Т.е. при сбоях сети копирование будет пытаться восстановиться и при дачном подключении — продолжится.
На этом с ключами всё. Последний элемент моей команды (совершенно не обязателен. скорее даже не желателен):
>>lastcopy.log
Ээээ… Это перенаправление стандартного вывода в файл. Тихо-тихо! Сейчас объясню человеческим языком. Если запустить команду без вот этого вот параметра, то в консоли быстро-быстро побегут какие-то строчки. А вот этот параметр все эти строчки сохраняет в файл lastcopy.log. При этом в консоли ничего не отображается. Это и есть «перенаправление стандартного вывода»! 🙂 Вобщем, фича ненужная и вредная, потому как вскоре вы забудете про этот файл lastcopy.log и он разрастётся до немыслимых размеров.
Вот и всё! Юзайте на здоровье! 🙂
PS Подробнее про команду xcopy и многие другие можно почитать в справке windows, которая лежит по адресу (системный раздел):\WINDOWS\Help\ntcmds.chm
а | tar?
Можно, но надо ли? Мне, к примеру, просто нужна копия на второй машине. А так — можно и тар, и зип, и (возможно) изо. Да и обычному узеру это нах не нужно)
давненько я с батниками не игрался. а какое поведение этой команды если комп по сети недоступен?
Ну, поскольку на консоль вообще не выводится, то она просто висит. Впрочем, как я понимаю, когда траблы с сеткой, то консоль висит очень долго. Кстати, там можно поиграться с потоками вывода. Если не ошибаюсь, 1 — это рабочий отчёт, а 2 — сообщения об ошибках. Т.е. можно сделать 1>>lastcopy.log 2>>error.log. Ну, думаю, ты понял, что получаем на выходе))
сделай скобочки одиночными, лог будет затираться и содержать только отчёт о последнем бэкапе
плюс, если отрабатывать еррорлевелы выхода xcopy, несложно варнить юзера о неудаче.
Да, про скобочки я в курсе. Просто мне как-то нужна была историю копирования, а потом так и оставил. Периодически чищу.
Ээээ… Шо?
errorlevel
вот они, последствия отсутствия знакомства с досом!
Однако… Не знал про такое, спасибо.
ну я пользую архиватор с разборкой файлов по расширению — какие паковать, а какие нет. так что бекап получается без мусора и временных файлов.
Ну, предварительно отфильтровать файлы по расширению — не проблема. 🙂