Сайт вебмастера

Делаем резервные копии с помощью xcopy

18-08-2008Reading time ~ 4 min.Софт 122396

Программ для создания резервных копий (backup, бэкап) великое множество. Есть и платные, есть и бесплатные. В некоторых используются «мастера», которые позволяют указать массу параметров, не прибегая к сложному процессу настройки.

Однако сам процесс резервирования на самом же деле - обычное копирование. Есть конечно варианты, вроде: архивирования, отслеживание изменений и т.д., но для большинства случаев сам алгоритм сводится к простым действиям:

  • выбор исходных данных (каталог, файлы);
  • выбор куда копировать (каталог);
  • непосредственно копирование.

Так вот для того, чтобы выполнить все эти операции совсем не обязательно прибегать к помощи сторонних программ. Всё необходимое уже есть в Windows.

Для того, чтобы скопировать файл/каталог используется команда xcopy. Она имеет много параметров, но в общем случае указывается так:

xcopy "D:\myfiles\*.*" "j:\backup\myfiles\*.*"

Данная команда скопирует каталог «d:\myfiles» в «j:\backup\myfiles».

Итак наши действия очень просты. Вначале откроем Notepad2. В нем нужно указать те каталоги, которые следует резервировать. Лично у меня важные данные хранятся в нескольких каталогах: «txt», «work» и т.д.

Вторым параметром мы указываем куда следует скопировать. Обычно я для резервирования использую внешний жесткий диск (USB).

Для того, чтобы Windows при каждом его подключении присваивала одну и ту же букву диска, нужно войти в Панель управления - Администрирование - Управление Компьютером - Управление дисками. На подключенном диске кликните правой кнопокй мыши и выберите «Изменить букву диска или путь к диску...». В открывшемся окне выберите «Изменить» и укажите нужную букву. Например, у меня указано «J».

Для удобства лучше сохранять имена каталогов, чтобы потом не запутаться. А сам бэкап я размещаю в отдельном каталоге «backup».

Алгоритм копирования будет таков: мы будем копировать только новые файлы, старые будут затираться. При этом мы не будем удалять уже несуществующие в исходном каталоге файлы. Всё это достигается указанием параметров для xcopy.

Вот рабочий пример резервирования кошельков WEBMONEY и Яндекс-Деньги:

xcopy "C:\Program Files\WEBMONEY\*.*" "j:\backup\WEBMONEY*.*" /E /F /H /R /K /Y /D
xcopy "C:\Program Files\Wallet\*.*" "j:\backup\Wallet*.*" /E /F /H /R /K /Y /D

Эти строки нужно скопировать в Notepad2 и сохранить в файле с расширением «.bat», например «backup.bat». Теперь нам достаточно только запустить его и все будет сделано автоматически.

Теперь обратите внимание, что пути мы указываем в кавычках «"» - это требование Windows для длинных имен. Каталоги разделяются обратным слэшем «». В конце указываются параметры для xcopy.

То есть вам нужно только указать ваши каталоги для резервирования и сохранить как «backup.bat». Вы можете сделать несколько таких файлов: процесс копирования может иногда занимать много времени, поэтому какие-то совсем критичные данные я копирую чаще - для них существует другой файл «QiuсkBACKUP.BAT».

Естественно вам нужно следить за тем, чтобы на приёмном диске было достаточно места.

Теперь следующий момент, с которым вы можете столкнуться - неверная кодировка текста. Дело в том, что русские буквы для DOS (где и происходит копирование) отличаются от Windows (где вы создали bat-файл). Например у меня есть каталог «c:\Избранное». Если я запущу bat-файл, то ничего не произойдет, поскольку xcopy его просто не найдет. Поэтому наш bat-файл нужно преобразовать в DOS-кодировку (её часто называют «OEM»).

Для этого мы выделяем такие строчки в Notepad2 и жмем Ctrl+Shift+O (или Edit - Convert - To OEM Text). Вы увидите «белиберду», но не пугайтесь, так и должно быть. В моем примере это выглядит так: «c:?§Ўа ­­®Ґ»

Если у вас есть Total Commander, то вы можете просмотреть этот файл по F3 и в просмотрщике переключить кодировку - клавиша «S».

Следующая задача, которой я не пользуюсь, но возможно вам пригодится - это копирование актуальной версии каталога, а старый бэкап переименовывается в «old».

Здесь задача совсем несложная: вначале нужно удалить старый «old», после этого переименовать текущий бэкап в «old» и скопировать как обычно xcopy. Вот пример резервирования каталога «c:\work»:

del "j:\backup\work_old" /s /q
rmdir "j:\backup\work_old" /s /q
rename "j:\backup\work" "work_old"
xcopy "c:\work\*.*" "j:\backup\work*.*" /E /F /H /R /K /Y /D

Команда «del» удаляет все файлы из каталога. Команда «rmdir» удаляет пустой каталог. Команда «rename» переименовывает файлы. А командой «xcopy» мы, как обычно, копируем файлы.

Related Posts
Comments (18) RSS
1 Dimox 2008-08-19 15:44:22

Давно пользуюсь данной техникой. Действительно, все очень просто и удобно.


2 sin 2008-08-20 21:41:45

Еще можно подключить к всему этому WinRar с команднной строки.

Тоесть при таком бэкапе попутно все сжимать на лету.

Кстати говоря у Рара довольно много интересных параметров командной строки, можно даже сделать резервирование со сверкой дат изменения, и не затрагивать не измененные данные, обновляя только измененное и добавляя новое.


3 ihtiandr 2008-08-21 12:30:58

Спасибо, сделал себе такое, очень удобно.


4 aLeXgO 2008-08-22 13:16:59

Спасибо, Максим, за описание столь полезного и простого способа копирования.

Помню как-то Вы упоминали о таком способе резервного копирования, но не описали подробно. Исправились =)


5 Leo 2008-08-23 16:54:09

Я в своей практике много вариантов "бакапирования" пробовал, в том числе и подобные (эдакий без замутов и всем все понятно - вариант для конторы, кстати, слабо заменимый).

А лично для себя давно и бесповоротно выбрал (из ~20 разных бэкаперов, что нашел тогда) Genie Backup Manager. Все же, в определенный момент надоедает править батники.. ;)


6 Стай 2008-08-25 08:09:14

Вообще оказывается оч даже удобно, спасибо за помощь.


7 Mba 2008-08-27 13:50:54

Интересный способ. Но все равно считаю более удобным пользоваться специальным софтом (как тот же GBM в комменте Leo).


8 Gordon 2008-08-27 20:58:27

Спасибо за статью,всё просто и удобно !


9 stasiska 2008-10-18 22:57:22

парни как защитить диск от перезаписи :cool:


10 Vini 2009-05-28 17:06:17

Есть интересный сайт с примерами по данной теме http://cerber.synkmaster.ru


11 person@g 2009-08-13 08:57:03

Bat-файл можно создать и в обычном блокноте (notepad.exe) в DOS кодировке.Для этого просто выбрать шрифт Terminal


12 Николай 2011-01-25 09:48:18

в принципе всё ясно, но всё же... как же сделать так чтобы xCopy скопировала несколько папок, названых русскими именами??? менял шрифт в батнике результат тот же - Не найден файл: ╥хёЄ. а смысла в открытии Listerом и нажатии кнопки S я вообще не увидел, т. к. меняется отображение. при повторном открытии всё возвращается на круги своя. разъясните, а? очень нужно. заранее благодарен!!


13 Admin 2011-01-25 10:00:29 admin
xCopy консольная команда, поэтому для неё русский язык должен быть в кодировке OEM (866). Поэтому bat-файл лучше всего писать в Notepad2 (или аналогичном): File - Encoding - More (или F9). В нём выбираем OEM (866).

14 Николай 2011-01-25 10:15:48

открыл в AkelPad там есть функция Сохранить в... и выбор кодировки. после этого всё получилось. Я так понял тот же, например, Lister меняет только отображение и не пересохраняет файл в другой кодировке?


15 Admin 2011-01-25 10:18:16 admin

Еще раз читайте мой коммент, там всё по-русски написано.


16 Редя 2012-01-31 06:14:48

на крайняк можно *.txt открыть через ворд) Он должен спросить в какой кодировке его читать. Выбираем досовскую, редактируем, сохраняем, радуемся жизни


17 Юрий 2012-02-03 13:08:34
xcopy "C:\Program Files\WEBMONEY\*.*" "j:\backup\WEBMONEY\*.*" /E /F /H /R /K /Y /D

xcopy "C:\Program Files\Wallet\*.*" "j:\backup\Wallet\*.*" /E /F /H /R /K /Y /D

- синтаксическая ошибка. правильно будет:

xcopy "C:\Progra~1\WEBMONEY\*.*" "j:\backup\WEBMONEY\*.*" /F/Y

xcopy "C:\Progra~1\Wallet\*.*" "j:\backup\Wallet\*.* /F /Y - этих двух значений достаточно


18 Игорь 2017-06-09 16:17:07

Я крайне опасаюсь, что ооOчень опоздал с вопросом, но, пожалуйста, ответьте как сделать резервную копию текущего каталога с его текущим именем?

Тобишь кидаю батник в папку, оттуда его запускаю, в открывшемся окне cmd пишу путь "куда", а потом иду "туда" и вижу там внутрях такую же папку(то же имя, те же подкаталоги, те же атрибуты у файлов и папок, а также отсутствие батника, через который я это сделал).